{
  "version": "1.0.0",
  "lastTested": "2026-09-11",
  "apiTarget": "document.modelContext.registerTool()",
  "tools": [
    {
      "name": "search_video_analytics_solutions",
      "kind": "read-only",
      "description": "Search the published Ayonix video analytics solutions by free-text query. Returns matching solution names, summaries and canonical URLs. Read-only: creates no record and sends nothing.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Free-text search, for example \"queue\", \"perimeter\" or \"parking occupancy\"",
            "maxLength": 120,
            "minLength": 1
          },
          "limit": {
            "type": "integer",
            "description": "Maximum results to return",
            "minimum": 1,
            "maximum": 20,
            "default": 8
          }
        },
        "required": ["query"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "list_supported_analytics",
      "kind": "read-only",
      "description": "List every video analytics capability published on this site, with its availability state (verified against Ayonix product pages, or delivered as a solution-design configuration). Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "family": {
            "type": "string",
            "description": "Optional family filter",
            "enum": ["security", "operations", "retail", "traffic"]
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "get_solution_details",
      "kind": "read-only",
      "description": "Get the full published detail for one video analytics solution: what it detects, what it does not guarantee, camera requirements, limitations, deployment options and pilot criteria. Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Solution slug, for example \"queue-management\"",
            "maxLength": 80,
            "minLength": 1
          }
        },
        "required": ["slug"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "find_solutions_by_industry",
      "kind": "read-only",
      "description": "Find the video analytics solutions recommended for a given industry, with the industry-specific pain points they address. Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "industry": {
            "type": "string",
            "description": "Industry slug, for example \"retail\" or \"railway-and-metro\"",
            "maxLength": 80,
            "minLength": 1
          }
        },
        "required": ["industry"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "compare_deployment_options",
      "kind": "read-only",
      "description": "Compare Ayonix deployment architectures (edge, on-premise, air-gapped, hybrid, multi-site, ATLAS AIBOX) across bandwidth, latency, privacy, resilience and limitations. Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "options": {
            "type": "array",
            "description": "Deployment slugs to compare. Omit to compare all.",
            "items": {
              "type": "string",
              "maxLength": 80
            },
            "maxItems": 6
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "get_camera_readiness_requirements",
      "kind": "read-only",
      "description": "Get the camera requirements and environmental limitations for a specific analytic, so a camera estate can be assessed before any commitment. Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Solution slug",
            "maxLength": 80,
            "minLength": 1
          }
        },
        "required": ["slug"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "get_vms_integration_details",
      "kind": "read-only",
      "description": "Get the integration mechanisms and explicit compatibility state for a VMS or protocol. States are: production validated, technically supported, available through integration project, under validation, not supported. Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Integration slug, for example \"milestone-xprotect\"",
            "maxLength": 80,
            "minLength": 1
          }
        },
        "required": ["slug"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "get_video_analytics_architecture",
      "kind": "read-only",
      "description": "Get the camera-to-action processing pipeline and the mechanisms used to reduce irrelevant and duplicate alerts. Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "get_pilot_requirements",
      "kind": "read-only",
      "description": "Get the inputs a controlled pilot requires and the metrics it measures, so an evaluation can be scoped before contacting anyone. Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "solution": {
            "type": "string",
            "description": "Optional solution slug for solution-specific criteria",
            "maxLength": 80
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "get_case_studies",
      "kind": "read-only",
      "description": "Get the anonymised deployment patterns published on this site. No named customers, logos or performance figures are published, because none have been supplied for publication. Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "industry": {
            "type": "string",
            "description": "Optional industry slug filter",
            "maxLength": 80
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "get_resource",
      "kind": "read-only",
      "description": "Get a published resource (camera planning guide, pilot checklist, procurement question set) with its canonical URL and download path. Read-only: returns a link, downloads nothing.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Resource id. Omit to list all resources.",
            "maxLength": 80
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "get_company_facts",
      "kind": "read-only",
      "description": "Get the canonical Ayonix company record: founding, headquarters, regions, product lines and contact, each with its source and verification date. Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "get_privacy_and_governance_information",
      "kind": "read-only",
      "description": "Get the privacy and governance position for the site or for a specific analytic, including what is processed, what is never inferred, and what obligations typically apply. Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "solution": {
            "type": "string",
            "description": "Optional solution slug for analytic-specific governance",
            "maxLength": 80
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "recommend_video_analytics_solution",
      "kind": "recommendation",
      "description": "Recommend published analytics for a described operational problem. Returns ranked candidates with the reason each was selected and what still needs site validation. Read-only: creates no record.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "problem": {
            "type": "string",
            "description": "The operational problem in plain language",
            "maxLength": 600,
            "minLength": 1
          },
          "industry": {
            "type": "string",
            "description": "Optional industry slug for better matching",
            "maxLength": 80
          },
          "environment": {
            "type": "string",
            "description": "Where the problem occurs",
            "enum": ["indoor", "outdoor", "both"],
            "default": "both"
          }
        },
        "required": ["problem"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "recommend_deployment_architecture",
      "kind": "recommendation",
      "description": "Recommend a deployment architecture from site count, connectivity, data-residency constraints and whether alerting must survive a network outage. Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sites": {
            "type": "integer",
            "description": "Number of sites",
            "minimum": 1,
            "maximum": 100000
          },
          "camerasPerSite": {
            "type": "integer",
            "description": "Approximate cameras per site",
            "minimum": 1,
            "maximum": 10000
          },
          "connectivity": {
            "type": "string",
            "description": "WAN quality at the least-connected site",
            "enum": ["good", "constrained", "intermittent", "none"]
          },
          "dataMustStayOnSite": {
            "type": "boolean",
            "description": "True when video may not leave the site network"
          },
          "alertingMustSurviveOutage": {
            "type": "boolean",
            "description": "True when alerting must continue during a WAN outage"
          }
        },
        "required": ["sites", "connectivity"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "recommend_analytics_for_industry",
      "kind": "recommendation",
      "description": "Recommend analytics for an industry with the camera placement, event workflow and pilot plan published for that sector. Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "industry": {
            "type": "string",
            "description": "Industry slug",
            "maxLength": 80,
            "minLength": 1
          },
          "priority": {
            "type": "string",
            "description": "What matters most",
            "enum": ["security", "safety", "operations", "commercial"],
            "default": "operations"
          }
        },
        "required": ["industry"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "build_pilot_plan",
      "kind": "recommendation",
      "description": "Build a controlled pilot plan for a stated objective, camera count and duration. Returns phases, ground-truth method and the measurable acceptance criteria to agree before starting. Read-only: nothing is submitted.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "objective": {
            "type": "string",
            "description": "What the pilot must establish",
            "maxLength": 400,
            "minLength": 1
          },
          "cameras": {
            "type": "integer",
            "description": "Number of cameras in the pilot",
            "minimum": 1,
            "maximum": 5000
          },
          "solutions": {
            "type": "array",
            "description": "Solution slugs in scope",
            "items": {
              "type": "string",
              "maxLength": 80
            },
            "maxItems": 8
          },
          "weeks": {
            "type": "integer",
            "description": "Planned pilot duration in weeks",
            "minimum": 1,
            "maximum": 52,
            "default": 6
          }
        },
        "required": ["objective", "cameras"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "build_camera_assessment_checklist",
      "kind": "recommendation",
      "description": "Build a camera readiness checklist for the selected analytics, covering pixel-on-target, angle, frame rate, lighting and stability. Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "solutions": {
            "type": "array",
            "description": "Solution slugs the cameras must support",
            "items": {
              "type": "string",
              "maxLength": 80
            },
            "minItems": 1,
            "maxItems": 8
          },
          "environment": {
            "type": "string",
            "enum": ["indoor", "outdoor", "both"],
            "default": "both",
            "description": "Camera environment"
          }
        },
        "required": ["solutions"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "build_vms_integration_checklist",
      "kind": "recommendation",
      "description": "Build an integration checklist for a VMS, covering version confirmation, entity mapping, event taxonomy, clock synchronisation and failure handling. Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "vms": {
            "type": "string",
            "description": "Integration slug, for example \"genetec-security-center\"",
            "maxLength": 80,
            "minLength": 1
          }
        },
        "required": ["vms"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "prepare_solution_design_request",
      "kind": "prepare",
      "description": "Prepare a solution design request for review. Returns the exact data that would be submitted plus a confirmation token. NOTHING IS SENT by this tool — the request is only submitted if confirm_solution_design_request is then called with the token.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Full name of the requester",
            "maxLength": 120,
            "minLength": 1
          },
          "workEmail": {
            "type": "string",
            "description": "Work email address",
            "maxLength": 160,
            "minLength": 1
          },
          "company": {
            "type": "string",
            "description": "Organisation name",
            "maxLength": 160,
            "minLength": 1
          },
          "role": {
            "type": "string",
            "description": "Job role",
            "maxLength": 120
          },
          "country": {
            "type": "string",
            "description": "Country",
            "maxLength": 80
          },
          "industry": {
            "type": "string",
            "description": "Industry slug",
            "maxLength": 80
          },
          "useCase": {
            "type": "string",
            "description": "The operational problem to solve",
            "maxLength": 1200,
            "minLength": 1
          },
          "sites": {
            "type": "integer",
            "description": "Number of sites",
            "minimum": 1,
            "maximum": 100000
          },
          "cameras": {
            "type": "integer",
            "description": "Approximate camera count",
            "minimum": 1,
            "maximum": 1000000
          },
          "vms": {
            "type": "string",
            "description": "VMS in use, if any",
            "maxLength": 120
          },
          "deploymentPreference": {
            "type": "string",
            "enum": ["edge", "on-premise", "air-gapped", "hybrid", "undecided"],
            "description": "Preferred deployment model"
          },
          "timeline": {
            "type": "string",
            "description": "Project timeline",
            "maxLength": 120
          }
        },
        "required": ["name", "workEmail", "company", "useCase"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "confirm_solution_design_request",
      "kind": "confirm",
      "description": "Submit the solution design request previously prepared by prepare_solution_design_request. THIS SENDS THE REQUEST and stores it. Requires the confirmation token and explicit user consent. The user must have seen the exact data first.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "confirmationToken": {
            "type": "string",
            "description": "Token returned by prepare_solution_design_request",
            "maxLength": 120,
            "minLength": 1
          },
          "consent": {
            "type": "boolean",
            "description": "Must be true. The user confirms they want this sent and accepts the privacy notice."
          }
        },
        "required": ["confirmationToken", "consent"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": true,
      "requiresTokenFrom": "prepare_solution_design_request",
      "annotations": {
        "readOnlyHint": false,
        "consequentialHint": true
      }
    },
    {
      "name": "prepare_pilot_request",
      "kind": "prepare",
      "description": "Prepare a controlled pilot request for review. Returns the exact data that would be submitted plus a confirmation token. NOTHING IS SENT by this tool.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Full name",
            "maxLength": 120,
            "minLength": 1
          },
          "workEmail": {
            "type": "string",
            "description": "Work email address",
            "maxLength": 160,
            "minLength": 1
          },
          "company": {
            "type": "string",
            "description": "Organisation name",
            "maxLength": 160,
            "minLength": 1
          },
          "role": {
            "type": "string",
            "description": "Job role",
            "maxLength": 120
          },
          "country": {
            "type": "string",
            "description": "Country",
            "maxLength": 80
          },
          "industry": {
            "type": "string",
            "description": "Industry slug",
            "maxLength": 80
          },
          "objective": {
            "type": "string",
            "description": "What the pilot must establish",
            "maxLength": 1200,
            "minLength": 1
          },
          "solutions": {
            "type": "array",
            "description": "Solution slugs in scope",
            "items": {
              "type": "string",
              "maxLength": 80
            },
            "maxItems": 8
          },
          "cameras": {
            "type": "integer",
            "description": "Cameras in the pilot",
            "minimum": 1,
            "maximum": 5000
          },
          "sites": {
            "type": "integer",
            "description": "Sites in the pilot",
            "minimum": 1,
            "maximum": 1000
          },
          "cameraBrands": {
            "type": "string",
            "description": "Camera manufacturers on site",
            "maxLength": 200
          },
          "vms": {
            "type": "string",
            "description": "VMS in use",
            "maxLength": 120
          },
          "deploymentPreference": {
            "type": "string",
            "enum": ["edge", "on-premise", "air-gapped", "hybrid", "undecided"],
            "description": "Preferred deployment model"
          },
          "timeline": {
            "type": "string",
            "description": "When the pilot should start",
            "maxLength": 120
          }
        },
        "required": ["name", "workEmail", "company", "objective", "cameras"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "confirm_pilot_request",
      "kind": "confirm",
      "description": "Submit the pilot request previously prepared by prepare_pilot_request. THIS SENDS THE REQUEST and stores it. Requires the confirmation token and explicit user consent.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "confirmationToken": {
            "type": "string",
            "description": "Token returned by prepare_pilot_request",
            "maxLength": 120,
            "minLength": 1
          },
          "consent": {
            "type": "boolean",
            "description": "Must be true. The user confirms they want this sent."
          }
        },
        "required": ["confirmationToken", "consent"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": true,
      "requiresTokenFrom": "prepare_pilot_request",
      "annotations": {
        "readOnlyHint": false,
        "consequentialHint": true
      }
    },
    {
      "name": "prepare_sample_video_assessment",
      "kind": "prepare",
      "description": "Prepare a sample video assessment request. Returns the exact data plus a confirmation token. NOTHING IS SENT and NO FILE IS UPLOADED by this tool. File selection always requires the user to choose a file in the page — an agent cannot select or upload a file.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Full name",
            "maxLength": 120,
            "minLength": 1
          },
          "workEmail": {
            "type": "string",
            "description": "Work email address",
            "maxLength": 160,
            "minLength": 1
          },
          "company": {
            "type": "string",
            "description": "Organisation name",
            "maxLength": 160,
            "minLength": 1
          },
          "country": {
            "type": "string",
            "description": "Country",
            "maxLength": 80
          },
          "objective": {
            "type": "string",
            "description": "What the footage should be assessed for",
            "maxLength": 1000,
            "minLength": 1
          },
          "footageDescription": {
            "type": "string",
            "description": "What the footage shows: scene, camera position, duration",
            "maxLength": 800,
            "minLength": 1
          },
          "authorisedToShare": {
            "type": "boolean",
            "description": "Must be true. The requester confirms they are authorised to share this footage."
          },
          "privacyConsent": {
            "type": "boolean",
            "description": "Must be true. The requester accepts the footage-handling and deletion terms."
          }
        },
        "required": [
          "name",
          "workEmail",
          "company",
          "objective",
          "footageDescription",
          "authorisedToShare",
          "privacyConsent"
        ],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "confirm_sample_video_assessment",
      "kind": "confirm",
      "description": "Submit the sample video assessment request previously prepared. THIS SENDS THE REQUEST. It does NOT upload any file — the user must select and upload footage themselves in the page. Requires the confirmation token and explicit consent.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "confirmationToken": {
            "type": "string",
            "description": "Token returned by prepare_sample_video_assessment",
            "maxLength": 120,
            "minLength": 1
          },
          "consent": {
            "type": "boolean",
            "description": "Must be true."
          }
        },
        "required": ["confirmationToken", "consent"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": true,
      "requiresTokenFrom": "prepare_sample_video_assessment",
      "annotations": {
        "readOnlyHint": false,
        "consequentialHint": true
      }
    },
    {
      "name": "prepare_sdk_request",
      "kind": "prepare",
      "description": "Prepare an SDK or API evaluation access request. Returns the exact data plus a confirmation token. NOTHING IS SENT by this tool.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Full name",
            "maxLength": 120,
            "minLength": 1
          },
          "workEmail": {
            "type": "string",
            "description": "Work email address",
            "maxLength": 160,
            "minLength": 1
          },
          "company": {
            "type": "string",
            "description": "Organisation name",
            "maxLength": 160,
            "minLength": 1
          },
          "role": {
            "type": "string",
            "description": "Job role",
            "maxLength": 120
          },
          "country": {
            "type": "string",
            "description": "Country",
            "maxLength": 80
          },
          "interest": {
            "type": "string",
            "enum": ["sdk", "api", "webhooks", "architecture-review"],
            "description": "What access is requested"
          },
          "useCase": {
            "type": "string",
            "description": "What is being built and why the interface is needed",
            "maxLength": 1200,
            "minLength": 1
          },
          "platform": {
            "type": "string",
            "description": "Target platform and hardware",
            "maxLength": 200
          },
          "timeline": {
            "type": "string",
            "description": "Evaluation timeline",
            "maxLength": 120
          }
        },
        "required": ["name", "workEmail", "company", "interest", "useCase"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "confirm_sdk_request",
      "kind": "confirm",
      "description": "Submit the SDK or API evaluation request previously prepared by prepare_sdk_request. THIS SENDS THE REQUEST and stores it. Requires the confirmation token and explicit consent.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "confirmationToken": {
            "type": "string",
            "description": "Token returned by prepare_sdk_request",
            "maxLength": 120,
            "minLength": 1
          },
          "consent": {
            "type": "boolean",
            "description": "Must be true."
          }
        },
        "required": ["confirmationToken", "consent"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": true,
      "requiresTokenFrom": "prepare_sdk_request",
      "annotations": {
        "readOnlyHint": false,
        "consequentialHint": true
      }
    },
    {
      "name": "prepare_vms_integration_request",
      "kind": "prepare",
      "description": "Prepare a VMS integration request. Returns the exact data plus a confirmation token. NOTHING IS SENT by this tool.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Full name",
            "maxLength": 120,
            "minLength": 1
          },
          "workEmail": {
            "type": "string",
            "description": "Work email address",
            "maxLength": 160,
            "minLength": 1
          },
          "company": {
            "type": "string",
            "description": "Organisation name",
            "maxLength": 160,
            "minLength": 1
          },
          "country": {
            "type": "string",
            "description": "Country",
            "maxLength": 80
          },
          "vms": {
            "type": "string",
            "description": "Integration slug, for example \"milestone-xprotect\"",
            "maxLength": 80,
            "minLength": 1
          },
          "vmsVersion": {
            "type": "string",
            "description": "VMS product tier and version in use",
            "maxLength": 120
          },
          "cameras": {
            "type": "integer",
            "description": "Cameras in scope",
            "minimum": 1,
            "maximum": 1000000
          },
          "requirements": {
            "type": "string",
            "description": "What the integration must deliver for operators",
            "maxLength": 1200,
            "minLength": 1
          }
        },
        "required": ["name", "workEmail", "company", "vms", "requirements"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": false,
      "annotations": {
        "readOnlyHint": true,
        "consequentialHint": false
      }
    },
    {
      "name": "confirm_vms_integration_request",
      "kind": "confirm",
      "description": "Submit the VMS integration request previously prepared by prepare_vms_integration_request. THIS SENDS THE REQUEST and stores it. Requires the confirmation token and explicit consent.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "confirmationToken": {
            "type": "string",
            "description": "Token returned by prepare_vms_integration_request",
            "maxLength": 120,
            "minLength": 1
          },
          "consent": {
            "type": "boolean",
            "description": "Must be true."
          }
        },
        "required": ["confirmationToken", "consent"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": true,
      "requiresTokenFrom": "prepare_vms_integration_request",
      "annotations": {
        "readOnlyHint": false,
        "consequentialHint": true
      }
    },
    {
      "name": "download_selected_resource",
      "kind": "confirm",
      "description": "Open a published resource for download in the current page. This navigates the browser to the resource; it stores no record and sends no personal data. The resource must first be found with get_resource.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Resource id returned by get_resource",
            "maxLength": 80,
            "minLength": 1
          },
          "consent": {
            "type": "boolean",
            "description": "Must be true. The user confirms they want the download opened."
          }
        },
        "required": ["id", "consent"],
        "additionalProperties": false
      },
      "scopes": ["global"],
      "externalEffect": true,
      "annotations": {
        "readOnlyHint": false,
        "consequentialHint": true
      }
    }
  ]
}
