ivedaai-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| IVEDAAI_BASE_URL | Yes | Origin of your IvedaAI server, e.g. https://ivedaai.example.com. No path. | |
| IVEDAAI_PASSWORD | Yes | IvedaAI account password. | |
| IVEDAAI_USERNAME | Yes | IvedaAI account username. | |
| IVEDAAI_CLIENT_ID | No | Sent as HTTP Basic auth on the token request, if your deployment requires client credentials. | |
| IVEDAAI_READ_ONLY | No | true serves reads only: non-GET operations are withheld from every tool, and the two write-oriented convenience tools are not registered. | false |
| IVEDAAI_TIMEOUT_MS | No | Per-request timeout, including reading the response body. Several IvedaAI endpoints block rather than failing fast when a camera is unreachable, so this matters. | 30000 |
| IVEDAAI_SWAGGER_PATH | No | Path to an alternate OpenAPI 3 document, if your deployment's API differs from the bundled one. | bundled |
| IVEDAAI_CLIENT_SECRET | No | Sent as HTTP Basic auth on the token request, if your deployment requires client credentials. | |
| IVEDAAI_REDACT_SECRETS | No | Masks credential-shaped fields (keys, secrets, passphrases) in responses. false disables it. | true |
| IVEDAAI_ALLOW_INSECURE_TLS | No | true skips TLS certificate verification, for on-prem deployments with self-signed certificates. Traffic stays encrypted; the certificate is not checked. Scoped to this server's requests, not process-wide. | false |
| IVEDAAI_ALLOW_LOSSY_UPDATE | No | true disables the lossy-update guard. Intended for the maintainers' CRUD probe; leave it unset. | false |
| IVEDAAI_MAX_RESPONSE_BYTES | No | Response body bytes read before truncating. | 2000000 |
| IVEDAAI_ALLOW_COLLECTION_DELETE | No | true permits the 20 DELETEs that name no record — see Destructive operations. | false |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ivedaai_accountA | IvedaAI API — Account operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/accounts — List accounts query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, nameContains?:string, userGroupId?:string, userGroupNameContains?:string, authenticationTypes?:string enum:Ldap|Local|OpenID, excludeSupremeAdmin?:boolean POST /api/accounts — Create account body: AccountRequest — required: email, locale, name, password, userGroupId; ivedaai_get_schema for all fields DELETE /api/accounts/{accountId} — Delete account by id path: accountId*:integer GET /api/accounts/{accountId} — Find account by id path: accountId*:integer PATCH /api/accounts/{accountId} — Patch account path: accountId*:integer body: AccountRequest — required: email, locale, name, password, userGroupId; ivedaai_get_schema for all fields NOTE: GET /api/accounts/{accountId} returns this field under a different key — userGroupId → userGroup.userGroupId. This endpoint has been confirmed to leave omitted fields alone, so this is for reading the value, not a warning about losing it. PUT /api/accounts/{accountId} — Update account path: accountId*:integer body: AccountRequest — required: email, locale, name, password, userGroupId; ivedaai_get_schema for all fields NOTE: GET /api/accounts/{accountId} returns this field under a different key — userGroupId → userGroup.userGroupId. This endpoint refuses partial bodies outright, so the full object is required regardless. GET /api/accounts/{accountId}/permissions — List account permissions path: accountId*:integer query: type?:string enum:Camera|FaceCategory|LicensePlateCategory DELETE /api/accounts/api-keys — Delete API key in batch query: apiKeyIds*:string GET /api/accounts/api-keys — Find all API keys for the account POST /api/accounts/api-keys — Create API key for the specific account body: { isActive*:boolean, name?:string } DELETE /api/accounts/api-keys/{keyId} — Delete API key path: keyId*:string PATCH /api/accounts/api-keys/{keyId} — Patch API key path: keyId*:string body: { isActive*:boolean, name?:string } GET /api/accounts/findByName — Find account by name query: accountName*:string |
| ivedaai_ainvrA | IvedaAI API — Ainvr operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/ainvrs — List Ainvrs query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean POST /api/ainvrs — Create Ainvr body: AinvrRequest — required: host, name, password, port, scheme, username; ivedaai_get_schema for all fields PUT /api/ainvrs — Sync Cluster(s) by id query: ainvrIds*:integer, notify?:boolean DELETE /api/ainvrs/{ainvrId} — Delete ainvr by id path: ainvrId*:integer GET /api/ainvrs/{ainvrId} — Find Ainvr by id path: ainvrId*:integer PATCH /api/ainvrs/{ainvrId} — patch Ainvr path: ainvrId*:integer body: AinvrRequest — required: host, name, password, port, scheme, username; ivedaai_get_schema for all fields PUT /api/ainvrs/{ainvrId} — Update Ainvr path: ainvrId*:integer body: AinvrRequest — required: host, name, password, port, scheme, username; ivedaai_get_schema for all fields PUT /api/ainvrs/{ainvrId}/cameras — Sync Ainvr Cameras path: ainvrId*:integer POST /api/ainvrs/validate — Check Ainvr connection body: AinvrRequest — required: host, name, password, port, scheme, username; ivedaai_get_schema for all fields |
| ivedaai_alertA | IvedaAI API — Alert operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/alerts — Find alerts query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, start*:string(yyyy-MM-dd[ HH:mm:ss[Z]]), end*:string(yyyy-MM-dd[ HH:mm:ss[Z]]), timezone?:string, ainvrIds?:integer, cameraIds?:integer, alertRuleIds?:string, alertTypes?:string enum:CAMERA_ABNORMAL|CROWD_DETECTION|DWELL|FACE_RECOGNITION|FALL|INTRUSION|LPR|OBJECT_COUNTING, states?:string enum:InProgress|Resolved|Unresolved PUT /api/alerts — Chage alert state body: { alertIds*:integer[], state*:enum(InProgress|Resolved|Unresolved) } POST /api/alerts/_search — Search alerts body: AlertQuery — ivedaai_get_schema for all fields DELETE /api/alerts/{alertId} — Delete alert by id path: alertId*:integer GET /api/alerts/{alertId} — Get alert details path: alertId*:integer GET /api/alerts/latest — Find latest alerts query: size?:integer, ainvrIds?:integer, alertRuleIds?:string, cameraIds?:integer, alertTypes?:string enum:CAMERA_ABNORMAL|CROWD_DETECTION|DWELL|FACE_RECOGNITION|FALL|INTRUSION|LPR|OBJECT_COUNTING, states?:string enum:InProgress|Resolved|Unresolved, start*:string(yyyy-MM-dd HH:mm:ss) POST /api/alerts/latest — Query latest alerts body: AlertQuery — ivedaai_get_schema for all fields POST /api/alerts/pairs — Find alerts with rule with camera pars body: AlertRequest — ivedaai_get_schema for all fields POST /api/alerts/statistics — Get alert statistics query: by*:string enum:camera|day|hour|minute|month|rule|state|type body: AlertQuery — ivedaai_get_schema for all fields |
| ivedaai_alert_ruleA | IvedaAI API — AlertRule operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/alertRules — Find alert rules query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, ainvrIds?:integer, cameraIds?:integer, name?:string, camName?:string, eventTypes?:string enum:CAMERA_ABNORMAL|CROWD_DETECTION|DWELL|FACE_RECOGNITION|FALL|INTRUSION|LPR|OBJECT_COUNTING POST /api/alertRules — Create alert rule body: AlertRuleRequest — ivedaai_get_schema for all fields DELETE /api/alertRules/{alertRuleId} — Delete alert rule by id path: alertRuleId*:string GET /api/alertRules/{alertRuleId} — Find alert rule by id path: alertRuleId*:string PATCH /api/alertRules/{alertRuleId} — Patch alert rule path: alertRuleId*:string body: AlertRuleRequest — ivedaai_get_schema for all fields NOTE: GET /api/alertRules/{alertRuleId} returns these fields under a different key — cameraIds → condition (JSON string).cameras, cooldownInterval → condition (JSON string).cooldownInterval, enableForever → schedule.forever, hashtags → condition (JSON string).hashtags, name → alertName, roiIds → condition (JSON string).roiIds, typeLogic → condition (JSON string).typeLogic, weekdays → schedule.weekdays. This endpoint has been confirmed to leave omitted fields alone, so this is for reading the value, not a warning about losing it. NOTE: "abnormalTypes", "countingRule", "faceCategoryIds", "idrAccess", "lineIds", "lprCategoryIds", "lprTypes", "personTypes", "roiTypes" have no known equivalent in GET /api/alertRules/{alertRuleId}, so they cannot be read back — but this endpoint keeps omitted fields, so they survive an update that leaves them out. PUT /api/alertRules/{alertRuleId} — Update alert rule path: alertRuleId*:string body: AlertRuleRequest — ivedaai_get_schema for all fields NOTE: GET /api/alertRules/{alertRuleId} returns these fields under a different key — cameraIds → condition (JSON string).cameras, cooldownInterval → condition (JSON string).cooldownInterval, enableForever → schedule.forever, hashtags → condition (JSON string).hashtags, name → alertName, roiIds → condition (JSON string).roiIds, typeLogic → condition (JSON string).typeLogic, weekdays → schedule.weekdays. This endpoint refuses partial bodies outright, so the full object is required regardless. NOTE: "abnormalTypes", "countingRule", "faceCategoryIds", "idrAccess", "lineIds", "lprCategoryIds", "lprTypes", "personTypes", "roiTypes" have no known equivalent in GET /api/alertRules/{alertRuleId}, so they cannot be read back — but this endpoint refuses partial bodies, so an update omitting them fails rather than resetting anything. GET /api/alertRules/types — Find alert rule types GET /api/alertTypes — Find alert rule types |
| ivedaai_alert_triggerA | IvedaAI API — AlertTrigger operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/alert-triggers/metadata — Get alert trigger metadata query: view?:string enum:All|Fr|Id|Lpr|Pc|Post|Vc POST /api/alertTriggers — Test alert triggers body: { trigger?:AlertTrigger } |
| ivedaai_analytic_configA | IvedaAI API — AnalyticConfig operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/analytic-configs — Find analytic configs query: cameraId*:integer, engines?:string POST /api/analytic-configs — Create analytic config body: { cameraId*:integer, config*:JsonObject, engine*:string } DELETE /api/analytic-configs/{configId} — Delete analytic config path: configId*:integer GET /api/analytic-configs/{configId} — Find analytic config path: configId*:integer PATCH /api/analytic-configs/{configId} — Update analytic config path: configId*:integer body: { cameraId*:integer, config*:JsonObject, engine*:string } |
| ivedaai_audit_trailA | IvedaAI API — AuditTrail operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/auditTrails — Find audit trails query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, start*:string(yyyy-MM-dd[ HH:mm:ss[Z]]), end*:string(yyyy-MM-dd[ HH:mm:ss[Z]]), accountName?:string, accountIds?:integer, keyword?:string, sourceIp?:string, action?:string enum:ACTIVATE|ADD|BATCH_DELETE|CANCEL|DEACTIVATE|DELETE|DISABLE|DOWNLOAD POST /api/auditTrails — create audit trails body: AuditTrailRequest — required: action, message, objectType; ivedaai_get_schema for all fields |
| ivedaai_authenticationA | IvedaAI API — Authentication operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. POST /api/auth — Get X-Auth-Token body: { password?:string, username?:string } |
| ivedaai_brandA | IvedaAI API — Brand operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/brands — List brands |
| ivedaai_cameraA | IvedaAI API — Camera operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/cameras — Find cameras query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, ainvrId?:integer, name?:string, nameContains?:string, cameraTypes?:string enum:App|External|Footage|General|Onvif|RecordedAnalytic|VideoSource, isLocal?:boolean, latitude?:number, longitude?:number, isActivate?:boolean, plugins?:string, pluginsAll?:string, floorPlanId?:string, cameraIds?:integer, cameraGroupIds?:string, groupNameContains?:string, fetchCameraGroups?:boolean POST /api/cameras — Create camera query: ainvrId?:integer body: CameraRequest — required: cameraType; ivedaai_get_schema for all fields DELETE /api/cameras/{cameraId} — Delete camera by id path: cameraId*:integer GET /api/cameras/{cameraId} — Find camera by id path: cameraId*:integer PATCH /api/cameras/{cameraId} — Patch cameara path: cameraId*:integer body: CameraRequest — required: cameraType; ivedaai_get_schema for all fields NOTE: GET /api/cameras/{cameraId} returns this field under a different key — nvrId → nvr.nvrId. This endpoint has been confirmed to leave omitted fields alone, so this is for reading the value, not a warning about losing it. NOTE: "doRecording", "engineConfig" have no known equivalent in GET /api/cameras/{cameraId}, so they cannot be read back — but this endpoint keeps omitted fields, so they survive an update that leaves them out. PUT /api/cameras/{cameraId} — Update cameara path: cameraId*:integer body: CameraRequest — required: cameraType; ivedaai_get_schema for all fields NOTE: GET /api/cameras/{cameraId} returns this field under a different key — nvrId → nvr.nvrId. This endpoint refuses partial bodies outright, so the full object is required regardless. NOTE: "doRecording", "engineConfig" have no known equivalent in GET /api/cameras/{cameraId}, so they cannot be read back — but this endpoint refuses partial bodies, so an update omitting them fails rather than resetting anything. POST /api/cameras/{cameraId}/jobs — Operate jobs by camera id path: cameraId*:integer query: activate*:boolean GET /api/cameras/{cameraId}/rva-heatmap — Get RVA heatmap path: cameraId*:integer query: from?:string, to?:string PUT /api/cameras/{cameraId}/status — Reset camera status path: cameraId*:integer query: resetHour?:integer POST /api/cameras/pseudo — Create pseudo camera body: PseudoCameraRequest — required: name; ivedaai_get_schema for all fields GET /api/cameras/recommend-engines — Get recommend engine for camera query: cameraIds*:integer, allCameras?:boolean, excludeEngines?:string enum:AgeGenderClassifier|CrossCameraTrackingEngine|CrowdDetectionEngine|DwellEngine|ExtraAlertTrigger|FaceGdpr|FaceRecognitionEngine|HumanAttributeEngine POST /api/cameras/recommend-engines — Apply recommend engine to camera body: array of CameraAutoConfiguration — required: cameraId, recommendEngines; ivedaai_get_schema for all fields GET /api/cameras/uri-schemes — List schemes for camera url connection |
| ivedaai_camera_stateA | IvedaAI API — Camera State operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/camerastatehistorys — Find camera state history query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, start*:string(yyyy-MM-dd[ HH:mm:ss[Z]]), end*:string(yyyy-MM-dd[ HH:mm:ss[Z]]), timezone?:string, cameraId*:integer |
| ivedaai_camera_groupA | IvedaAI API — CameraGroup operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/camera-groups — Find camera groups query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, nameContains?:string, ainvrIds?:integer, plugins?:string, numberOfCameras?:boolean, fetchCameras?:boolean, excludeNoCamera?:boolean, excludeNotInGroup?:boolean POST /api/camera-groups — Create a camera group body: CameraGroupRequest — required: cameraIds, name; ivedaai_get_schema for all fields DELETE /api/camera-groups/{cameraGroupId} — Remove camera group path: cameraGroupId*:string GET /api/camera-groups/{cameraGroupId} — Get camera group path: cameraGroupId*:string query: ainvrIds?:integer, plugins?:string enum:AgeGenderClassifier|CrossCameraTrackingEngine|CrowdDetectionEngine|DwellEngine|ExtraAlertTrigger|FaceGdpr|FaceRecognitionEngine|HumanAttributeEngine PUT /api/camera-groups/{cameraGroupId} — Update camera group path: cameraGroupId*:string body: CameraGroupRequest — required: cameraIds, name; ivedaai_get_schema for all fields NOTE: GET /api/camera-groups/{cameraGroupId} returns this field under a different key — cameraIds → cameras[].cameraId (item read only — the collection read returns null). This endpoint replaces the record, so omitted fields revert to their defaults — send the full object. CAUTION: "cameraGroupIds" has no known equivalent in GET /api/camera-groups/{cameraGroupId}, so its current value cannot be read back. Set it explicitly, or accept that it may be reset. GET /api/camera-groups/{cameraGroupId}/all — Get camera group for group admin path: cameraGroupId*:string DELETE /api/camera-groups/{cameraGroupId}/cameras — Remove cameras from camera group path: cameraGroupId*:string body: CameraGroupRequest — required: cameraIds, name; ivedaai_get_schema for all fields PUT /api/camera-groups/{cameraGroupId}/cameras — Add cameras to camera group path: cameraGroupId*:string body: CameraGroupRequest — required: cameraIds, name; ivedaai_get_schema for all fields |
| ivedaai_cloud_storageA | IvedaAI API — CloudStorage operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/cloud-storages — Get cloud storage POST /api/cloud-storages — Create cloud storage body: CloudStorage — required: cloudStorageType, lifecycleRules; ivedaai_get_schema for all fields PUT /api/cloud-storages — Update cloud storage body: CloudStorage — required: cloudStorageType, lifecycleRules; ivedaai_get_schema for all fields POST /api/cloud-storages/buckets — Create bucket on cloud storage body: CloudStorage — required: cloudStorageType, lifecycleRules; ivedaai_get_schema for all fields POST /api/cloud-storages/buckets/list — Get bucket list from cloud storage body: CloudStorage — required: cloudStorageType, lifecycleRules; ivedaai_get_schema for all fields GET /api/cloud-storages/object — Get cloud storage object query: objectKey*:string POST /api/cloud-storages/regions — Get region list from cloud storage body: CloudStorage — required: cloudStorageType, lifecycleRules; ivedaai_get_schema for all fields GET /api/cloud-storages/s3 — Get Qumulo S3 image file query: objectKey*:string |
| ivedaai_configurationA | IvedaAI API — Configuration operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/configs — Find configurations query: properties*:string PUT /api/configs/basic — Apply basic system settings body: SystemSetting — ivedaai_get_schema for all fields GET /api/configs/certificate — Get certificate details |
| ivedaai_countingA | IvedaAI API — Counting operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/counting/dashboard — Counting dashboard query: start*:string(yyyy-MM-dd HH:mm:ss[Z]), lineSetIds*:integer, types*:string GET /api/countings — Counting history query: start*:string(yyyy-MM-dd HH:mm:ss[Z]), end*:string(yyyy-MM-dd HH:mm:ss[Z]), lineSetIds*:integer, types*:string, measure*:string enum:Daily|Fifteen_Minutely|Five_Minutely|Hourly|Minutely|Monthly|Ten_Minutely|Thirty_Minutely |
| ivedaai_detectionA | IvedaAI API — Detection operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/detection/classifiers — List available classifier POST /api/detection/classifiers/{classifierName} — Do classification path: classifierName*:string file: provide as {path, filename?, contentType?} — local file to upload as "file" form fields (pass via body): threshold?:number POST /api/detection/clip/image — Use clip encode image file: provide as {path, filename?, contentType?} — local file to upload as "file" POST /api/detection/clip/text — Use clip encode text body: array of string POST /api/detection/colors — Detect colors file: provide as {path, filename?, contentType?} — local file to upload as "file" POST /api/detection/colors.image — Detect and draw colors file: provide as {path, filename?, contentType?} — local file to upload as "file" form fields (pass via body): label?:boolean POST /api/detection/objects — Detect objects query: plugins?:string enum:AgeGenderClassifier|CrossCameraTrackingEngine|CrowdDetectionEngine|DwellEngine|ExtraAlertTrigger|FaceGdpr|FaceRecognitionEngine|HumanAttributeEngine, profileId?:integer file: provide as {path, filename?, contentType?} — local file to upload as "file" POST /api/detection/objects.image — Detect and draw objects query: plugins?:string enum:AgeGenderClassifier|CrossCameraTrackingEngine|CrowdDetectionEngine|DwellEngine|ExtraAlertTrigger|FaceGdpr|FaceRecognitionEngine|HumanAttributeEngine, profileId?:integer, label?:boolean file: provide as {path, filename?, contentType?} — local file to upload as "file" POST /api/detection/plates — Detect License Plate query: profileId?:integer file: provide as {path, filename?, contentType?} — local file to upload as "file" POST /api/detection/plates.image — Detect and draw License Plate query: profileId?:integer, label?:boolean file: provide as {path, filename?, contentType?} — local file to upload as "file" |
| ivedaai_dwell_historyA | IvedaAI API — DwellHistory operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/dwellHistories — Find dwell histories query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, start*:string(yyyy-MM-dd[ HH:mm:ss[Z]]), end*:string(yyyy-MM-dd[ HH:mm:ss[Z]]), dwellHistoryId?:integer, localTrackId?:integer, type?:string enum:bicycle|bus|car|motorcycle|person|truck|vehicle, cameraId?:integer, roiId?:integer, dwellTime?:integer, sceneObjectId?:integer |
| ivedaai_engine_modelA | IvedaAI API — Engine Model operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/engineModels — List AI Models query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, ainvrId?:integer POST /api/engineModels — Upload AI Model file: provide as {path, filename?, contentType?} — local file to upload as "file" DELETE /api/engineModels/{engineModelId} — Delete AI Model by Id path: engineModelId*:integer POST /api/engineModels/{engineModelId} — Replace AI Model path: engineModelId*:integer file: provide as {path, filename?, contentType?} — local file to upload as "file" PUT /api/engineModels/{engineModelIds} — Enable AI Model path: engineModelIds*:string GET /api/engineModels/configuration — Get suggested configuration query: ainvrId?:integer GET /api/engineModels/service/status — Is AI Model Loading |
| ivedaai_engine_objectA | IvedaAI API — EngineObject operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/engine-objects — List EngineObjects query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean |
| ivedaai_engine_profileA | IvedaAI API — EngineProfile operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/engineProfiles — Find profiles query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, nameContains?:string, engineModelIds?:integer, isDefault?:boolean, ainvrId?:integer POST /api/engineProfiles — Create engine profile query: ainvrId?:integer body: EngineProfileRequest — required: name; ivedaai_get_schema for all fields DELETE /api/engineProfiles/{profileId} — Delete profile by id path: profileId*:integer GET /api/engineProfiles/{profileId} — Find profile by id path: profileId*:integer PUT /api/engineProfiles/{profileId} — Update engine profile path: profileId*:integer body: EngineProfileRequest — required: name; ivedaai_get_schema for all fields NOTE: GET /api/engineProfiles/{profileId} returns this field under a different key — engineModelIds → engineModelId. This endpoint has been confirmed to leave omitted fields alone, so this is for reading the value, not a warning about losing it. POST /api/engineProfiles/default/{engineModelIds} — Create default profile path: engineModelIds*:string query: ainvrId?:integer |
| ivedaai_eventA | IvedaAI API — Event operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/commonEvents — Find events query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, start*:string(yyyy-MM-dd[ HH:mm:ss[Z]]), end*:string(yyyy-MM-dd[ HH:mm:ss[Z]]), timezone?:string, types*:string enum:CROWD_DETECTION|DWELL|FALL|INTRUSION|OBJECT_LEFT_BEHIND|OBJECT_WRONG_DIRECTION|SCENE_CHANGE, ainvrIds?:integer, cameraIds?:integer, roiIds?:integer, allCameras?:boolean DELETE /api/commonEvents/{commonEventId} — Delete event by id path: commonEventId*:integer GET /api/commonEvents/{commonEventId} — Find event by id path: commonEventId*:integer GET /api/commonEvents/latest — Find latest events query: types*:string enum:CROWD_DETECTION|DWELL|FALL|INTRUSION|OBJECT_LEFT_BEHIND|OBJECT_WRONG_DIRECTION|SCENE_CHANGE, ainvrIds?:integer, cameraIds?:integer, roiIds?:integer, allCameras?:boolean, start*:string(yyyy-MM-dd HH:mm:ss), size?:integer |
| ivedaai_external_cameraA | IvedaAI API — ExternalCamera operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/externalCameras/{mappingId} — Get camera analysis meta path: mappingId*:string query: applicationId?:string POST /api/externalCameras/{mappingId} — put camera image path: mappingId*:string file: provide as {path, filename?, contentType?} — local file to upload as "file" form fields (pass via body): applicationId?:string, height?:integer, latitude?:number, longitude?:number, timestamp?:integer, width?:integer GET /api/externalCameras/{mappingId}/meta — get camera meta path: mappingId*:string |
| ivedaai_faceA | IvedaAI API — Face operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. POST /api/face — Face detection file: provide as {path, filename?, contentType?} — local file to upload as "file" form fields (pass via body): agQualityLevel?:string enum:high|low|medium, qualityLevel?:string enum:high|low|medium, sceneId?:integer, url?:string DELETE /api/face/{faceKeyId} — Delete faceKey path: faceKeyId*:integer POST /api/face/search — Face search query: ainvrIds?:integer, allCameras?:boolean, allFootages?:boolean, cameraIds?:integer, descriptor*:string, end*:string(yyyy-MM-dd[ HH:mm:ss[Z]]), footageIds?:integer, limit?:integer, scores?:number, start*:string(yyyy-MM-dd[ HH:mm:ss[Z]]) POST /api/face/similarity — Face similarity body: { descriptor1?:string, descriptor2?:string } POST /api/face/statistics — Get face statistics body: FaceStatisticRequest — required: by; ivedaai_get_schema for all fields |
| ivedaai_face_categoryA | IvedaAI API — FaceCategory operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/face/categories — List face categories POST /api/face/categories — Create face category body: { colorCode?:string, name*:string } DELETE /api/face/categories/{faceCategoryId} — Delete face category path: faceCategoryId*:string PUT /api/face/categories/{faceCategoryId} — Update face category path: faceCategoryId*:string body: { colorCode?:string, name*:string } |
| ivedaai_face_matchA | IvedaAI API — FaceMatch operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/face/{faceKeyId}/matches — Get match list path: faceKeyId*:integer GET /api/face/matches — Search face matches query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, start*:string(yyyy-MM-dd HH:mm:ss), unpaged?:boolean, end*:string(yyyy-MM-dd HH:mm:ss), ainvrIds?:integer, cameraIds?:integer, footageIds?:integer, categories?:string, nameContains?:string, scores?:number, age?:string enum:1-19|20-29|30-39|40-49|50-59|60-69|70-100, gender?:string enum:Female|Male|Unknown, emotion?:string enum:Angry|Happy|Neutral|Sad|Surprised|Unknown, hasMask?:boolean, allCameras?:boolean, allFootages?:boolean DELETE /api/face/matches/{matchId} — Delete face match path: matchId*:integer GET /api/face/matches/latest — Latest face matches query: ainvrIds?:integer, cameraIds*:integer, categories?:string, nameContains?:string, age?:string enum:1-19|20-29|30-39|40-49|50-59|60-69|70-100, gender?:string enum:Female|Male|Unknown, emotion?:string enum:Angry|Happy|Neutral|Sad|Surprised|Unknown, scores?:number, hasMask?:boolean, allCameras?:boolean, start*:string(yyyy-MM-dd HH:mm:ss), size?:integer |
| ivedaai_face_targetA | IvedaAI API — FaceTarget operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. POST /api/face/keys — Face Target Key Search query: descriptor*:string, limit?:integer, scores?:number DELETE /api/face/keys/{targetKeyId} — Delete face target key path: targetKeyId*:string GET /api/face/keys/{targetKeyId} — Find face target key path: targetKeyId*:string POST /api/face/keys/{targetKeyId} — Update face target key path: targetKeyId*:string query: url?:string, faceKeyId?:integer, descriptor?:string file: provide as {path, filename?, contentType?} — local file to upload as "file" GET /api/face/targets — List face targets query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, category?:string, nameContains?:string POST /api/face/targets — Create face target body: FaceTargetRequest — required: name; ivedaai_get_schema for all fields DELETE /api/face/targets/{targetId} — Delete face target path: targetId*:string GET /api/face/targets/{targetId} — Get face target path: targetId*:string PATCH /api/face/targets/{targetId} — Patch face target path: targetId*:string body: FaceTargetRequest — required: name; ivedaai_get_schema for all fields PUT /api/face/targets/{targetId} — Update face target path: targetId*:string body: FaceTargetRequest — required: name; ivedaai_get_schema for all fields GET /api/face/targets/{targetId}/keys — List face target keys path: targetId*:string POST /api/face/targets/{targetId}/keys — Add face target key path: targetId*:string form fields (pass via body): descriptor?:string, faceKeyId?:integer, url?:string GET /api/face/targets/export — Export Face target lists query: fileType?:string, category?:string, nameContains?:string GET /api/face/targets/unqualified — Get unqualified face target list |
| ivedaai_false_reportA | IvedaAI API — False-report operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/false-report — Check the connection is available POST /api/false-report — Send false detection report to server body: { description?:string, sceneId?:integer } |
| ivedaai_filterA | IvedaAI API — Filter operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/filters — List filters query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean POST /api/filters — Create filter body: FilterRequest — required: name, type; ivedaai_get_schema for all fields DELETE /api/filters/{filterId} — Delete filter path: filterId*:integer GET /api/filters/{filterId} — Find filter by id path: filterId*:integer PUT /api/filters/{filterId} — Update filter path: filterId*:integer body: FilterRequest — required: name, type; ivedaai_get_schema for all fields NOTE: GET /api/filters/{filterId} returns these fields under a different key — cameraIds → expression.cameraIds, query → expression.query, type → expression.type. This endpoint refuses partial bodies outright, so the full object is required regardless. |
| ivedaai_footageB | IvedaAI API — Footage operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/footages — List footages query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, ainvrIds?:integer, cameraIds?:integer, latitude?:number, longitude?:number, fileName?:string, fileNameContains?:string, startTime?:string(yyyy-MM-dd HH:mm:ss), endTime?:string(yyyy-MM-dd HH:mm:ss), statuses?:string enum:Complete|Failed|Waiting DELETE /api/footages/{footageId} — Delete footage by id path: footageId*:integer GET /api/footages/{footageId} — Find footage by id path: footageId*:integer PUT /api/footages/{footageId} — Cancel footage by id path: footageId*:integer |
| ivedaai_gatewayA | IvedaAI API — Gateway operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/gateways — List Gateway query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, name?:string, macAddress?:string POST /api/gateways — Create Gateway body: GatewayReq — required: macAddress, name, type; ivedaai_get_schema for all fields PUT /api/gateways/{gatewayId} — Update Gateway path: gatewayId*:string body: GatewayReq — required: macAddress, name, type; ivedaai_get_schema for all fields GET /api/gateways/{gatewayId}/cameras — List Camera in Gateway path: gatewayId*:string |
| ivedaai_hashtagA | IvedaAI API — Hashtag operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/hashtags — Find hashtag query: prefix?:string POST /api/hashtags — Create hashtag body: string PUT /api/hashtags — Setup live hashtag body: { cameraId?:integer, hashtags?:string[] } DELETE /api/hashtags/{keyword} — Delete hashtag path: keyword*:string |
| ivedaai_identity_recognitionA | IvedaAI API — IdentityRecognition operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/identity-recognition — Identity recognition history query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, start*:string(yyyy-MM-dd HH:mm:ss), unpaged?:boolean, end*:string(yyyy-MM-dd HH:mm:ss), ainvrIds?:integer, cameraIds?:integer, categories?:string, nameContains?:string, dlnContains?:string, granted?:boolean GET /api/identity-recognition/config — Identity recognition config GET /api/identity-recognition/latest — Latest identity recognition query: ainvrIds?:integer, cameraIds?:integer, categories?:string, nameContains?:string, dlnContains?:string, granted?:boolean, allCameras?:boolean, size?:integer |
| ivedaai_imageB | IvedaAI API — Image operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. POST /api/image/rotate — Image Rotation form fields (pass via body): usrFileName?:string |
| ivedaai_indoor_mapA | IvedaAI API — IndoorMap operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/indoor-maps — List Indoor Maps query: sorted?:boolean, unsorted?:boolean, withPermission*:boolean POST /api/indoor-maps — Create Indoor Map body: IndoorMapReq — required: location; ivedaai_get_schema for all fields DELETE /api/indoor-maps/{indoorMapId} — Delete Indoor Map by ID path: indoorMapId*:string GET /api/indoor-maps/{indoorMapId} — Find Indoor Map by ID path: indoorMapId*:string PUT /api/indoor-maps/{indoorMapId} — Update Indoor Map path: indoorMapId*:string body: IndoorMapReq — required: location; ivedaai_get_schema for all fields GET /api/indoor-maps/{indoorMapId}/floor-plans — Find Floor Plans for Indoor Map path: indoorMapId*:string query: sorted?:boolean, unsorted?:boolean POST /api/indoor-maps/{indoorMapId}/floor-plans — Create Floor Plans for IndoorMap path: indoorMapId*:string body: array of FloorPlanReq — required: filePath, name; ivedaai_get_schema for all fields DELETE /api/indoor-maps/floor-plans/{floorPlanId} — Delete Floor Plan by ID path: floorPlanId*:string GET /api/indoor-maps/floor-plans/{floorPlanId} — Find Floor Plan by ID path: floorPlanId*:string PUT /api/indoor-maps/floor-plans/{floorPlanId} — Update Floor Plan path: floorPlanId*:string body: FloorPlanReq — required: filePath, name; ivedaai_get_schema for all fields |
| ivedaai_jobA | IvedaAI API — Job operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/jobs — Get jobs query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, types*:string enum:RetrieveJob|StreamJob|UploadJob, cameraIds?:integer, footageIds?:integer, statuses?:string enum:Canceled|Completed|Delete|DuplicateExec|Failed|FailedRetry|Running|Suspended POST /api/jobs — Create job query: type*:string enum:RetrieveJob|StreamJob|UploadJob, cameraId?:integer, channel?:string, startTime?:string, endTime?:string, description?:string, usrFileName?:string, brightness?:string, engineProfileId?:integer, plugins?:string enum:AgeGenderClassifier|CrossCameraTrackingEngine|CrowdDetectionEngine|DwellEngine|ExtraAlertTrigger|FaceGdpr|FaceRecognitionEngine|HumanAttributeEngine, faceFeatures?:string, url?:string, gdprThreshold?:number, nvrId?:string, channelName?:string, latitude?:number, longitude?:number, doTranscode?:boolean file: provide as {path, filename?, contentType?} — local file to upload as "file" PUT /api/jobs — Operate all jobs query: action*:string enum:CANCEL|SUSPEND POST /api/jobs/{cameraId} — Cancel job by camera path: cameraId*:integer query: doWait?:boolean DELETE /api/jobs/{jobId} — Delete job by id path: jobId*:integer GET /api/jobs/{jobId} — Get job by id path: jobId*:integer PUT /api/jobs/{jobId} — Stop job by id path: jobId*:integer POST /api/jobs/retrieve — Create retrieve job query: channel*:string, channelName*:string, description?:string, doTranscode?:boolean, endTime*:string(yyyy-MM-dd[T][hh:mm:ss][Z]), engineProfileId*:integer, faceFeatures?:string[], gdprThreshold?:number, latitude?:number, longitude?:number, nvrId*:string, plugins?:string[], startTime*:string(yyyy-MM-dd[T][hh:mm:ss][Z]) POST /api/jobs/stream — Create stream job query: cameraId*:integer, description?:string POST /api/jobs/upload — Create upload job file: provide as {path, filename?, contentType?} — local file to upload as "file" form fields (pass via body): cameraId*:integer, description?:string, doTranscode?:boolean, engineProfileId*:integer, faceFeatures?:string[], gdprThreshold?:number, latitude?:number, longitude?:number, plugins?:string[], startTime*:string(yyyy-MM-dd[T][hh:mm:ss][Z]), url?:string, usrFileName*:string |
| ivedaai_licenseA | IvedaAI API — License operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/hardwareInfo — Get hardware info GET /api/licenses — Get License query: ainvrIds?:integer POST /api/licenses — Activate license query: activationType?:string enum:MANUAL|ONLINE file: provide as {path, filename?, contentType?} — local file to upload as "file" GET /api/licenses/ainvr — Get AINVR License query: ainvrIds*:integer GET /api/licenses/ainvr/date — Get license date GET /api/licenses/lpr — Get LPR License query: ainvrId*:integer |
| ivedaai_license_plateA | IvedaAI API — LicensePlate operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/lpr/plates — List license plates query: ainvrIds?:integer, offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, start*:string(yyyy-MM-dd HH:mm:ss), end*:string(yyyy-MM-dd HH:mm:ss), cameraIds?:integer, footageIds?:integer, categories?:string, type?:string, color?:string, characters?:string, make?:string, model?:string, country?:string, state?:string, vehicleType?:string, disabled?:boolean, allCameras?:boolean, allFootages?:boolean DELETE /api/lpr/plates/{licensePlateId} — Delete license plate path: licensePlateId*:integer PUT /api/lpr/plates/{licensePlateId} — Update license plate path: licensePlateId*:integer body: { characters*:string } GET /api/lpr/plates/latest — Latest license plates query: ainvrIds?:integer, cameraIds*:integer, categories?:string, type?:string, color?:string, characters?:string, make?:string, model?:string, country?:string, state?:string, vehicleType?:string, disabled?:boolean, size?:integer, allCameras?:boolean, start*:string(yyyy-MM-dd HH:mm:ss) |
| ivedaai_license_plate_categoryA | IvedaAI API — LicensePlateCategory operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/lpr/categories — List license plate categories POST /api/lpr/categories — Create license plate category body: { colorCode?:string, name*:string } DELETE /api/lpr/categories/{categoryId} — Delete license plate category path: categoryId*:string POST /api/lpr/categories/{categoryId} — Import license plate target path: categoryId*:string query: columnSeperator?:string file: provide as {path, filename?, contentType?} — local file to upload as "file" PUT /api/lpr/categories/{categoryId} — Update license plate category path: categoryId*:string body: { colorCode?:string, name*:string } |
| ivedaai_license_plate_targetA | IvedaAI API — LicensePlateTarget operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/lpr/targets — List license plate targets query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, category?:string, plateNumber?:string, vehicleOwner?:string, address?:string, description?:string POST /api/lpr/targets — Create license plate target body: LicensePlateTargetRequest — required: category, plateNumber; ivedaai_get_schema for all fields DELETE /api/lpr/targets/{targetId} — Delete license plate target path: targetId*:string GET /api/lpr/targets/{targetId} — Find license plate target path: targetId*:string PUT /api/lpr/targets/{targetId} — Update license plate target path: targetId*:string body: LicensePlateTargetRequest — required: category, plateNumber; ivedaai_get_schema for all fields GET /api/lpr/targets/export — Export license plate lists query: fileType?:string, category?:string, plateNumber?:string, vehicleOwner?:string, address?:string, description?:string |
| ivedaai_line_setA | IvedaAI API — LineSet operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/lineSets — Find lineSets query: ainvrIds?:integer, offset?:integer, pageNumber?:integer, pageSize?:integer, paged?:boolean, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, cameraIds?:integer, nameContains?:string, types?:string enum:Dwell|ObjectCounting|ObjectDirection, inCountingEnabled?:boolean, outCountingEnabled?:boolean, excludeUnused?:boolean, lineSetIds?:integer POST /api/lineSets — Create lineSet body: LineSetRequest — required: cameraId, name; ivedaai_get_schema for all fields DELETE /api/lineSets/{lineSetId} — Delete lineSet path: lineSetId*:integer GET /api/lineSets/{lineSetId} — Get lineSet path: lineSetId*:integer PATCH /api/lineSets/{lineSetId} — Patch lineSet path: lineSetId*:integer body: LineSetRequest — required: cameraId, name; ivedaai_get_schema for all fields NOTE: GET /api/lineSets/{lineSetId} returns this field under a different key — cameraId → camera.cameraId. This endpoint has been confirmed to leave omitted fields alone, so this is for reading the value, not a warning about losing it. PUT /api/lineSets/{lineSetId} — Update lineSet path: lineSetId*:integer body: LineSetRequest — required: cameraId, name; ivedaai_get_schema for all fields NOTE: GET /api/lineSets/{lineSetId} returns this field under a different key — cameraId → camera.cameraId. This endpoint has been confirmed to leave omitted fields alone, so this is for reading the value, not a warning about losing it. |
| ivedaai_make_modelB | IvedaAI API — MakeModel operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/make-models — Find make model list |
| ivedaai_mediaB | IvedaAI API — Media operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. POST /api/media/stream — Get stream info query: cameraId?:integer, doEstimate?:boolean body: CameraRequest — required: cameraType; ivedaai_get_schema for all fields |
| ivedaai_moduleA | IvedaAI API — Module operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. DELETE /api/modules — Uninstall module query: moduleId*:string GET /api/modules — Find modules query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, name?:string, vendor?:string, version?:string POST /api/modules — Install module file: provide as {path, filename?, contentType?} — local file to upload as "module" PUT /api/modules — Reload module path: moduleId*:string GET /api/modules/{moduleId} — Get module path: moduleId*:string |
| ivedaai_multi_factor_authenticationA | IvedaAI API — MultiFactorAuthentication operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. POST /api/mfa/email — verify mfa query: access_token*:string, otp_code*:string |
| ivedaai_nvrA | IvedaAI API — Nvr operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/nvrs — List Nvrs query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean POST /api/nvrs — Create Nvr body: NvrRequest — required: brandId, ip, name, port; ivedaai_get_schema for all fields DELETE /api/nvrs/{nvrId} — Delete Nvr by id path: nvrId*:string GET /api/nvrs/{nvrId} — Find Nvr by id path: nvrId*:string PUT /api/nvrs/{nvrId} — Update Nvr path: nvrId*:string body: NvrRequest — required: brandId, ip, name, port; ivedaai_get_schema for all fields NOTE: GET /api/nvrs/{nvrId} returns this field under a different key — brandId → brand.brandId. This endpoint refuses partial bodies outright, so the full object is required regardless. GET /api/nvrs/{nvrId}/cameras — List cameras by nvr id path: nvrId*:string query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean GET /api/nvrs/{nvrId}/channels — Find Nvr channels path: nvrId*:string GET /api/nvrs/{nvrId}/preview-channel/{channelIndex} — Preview NVR channel snapshot path: nvrId*:string, channelIndex*:string query: protocol?:string enum:Both|TCP|UDP GET /api/nvrs/{nvrType}/alerts — get the list of alert from NVR path: nvrType*:string enum:avigilon|digifort|ocularis query: ip*:string, port*:string, username*:string, password*:string, cameraIds?:integer POST /api/nvrs/connection — Check Nvr connection body: NvrRequest — required: brandId, ip, name, port; ivedaai_get_schema for all fields |
| ivedaai_oauthA | IvedaAI API — OAuth operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. POST /api/oauth2/token — Get token query: code?:string, code_verifier?:string, grant_type*:string enum:authorization_code|client_credentials|password|refresh_token, password?:string, refresh_token?:string, scope?:string, username?:string |
| ivedaai_object_typeA | IvedaAI API — ObjectType operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/objectTypes — List all object types contain synonyms query: ainvrId?:integer GET /api/types — List object types query: ainvrIds?:integer GET /api/types/{category} — List object types by category path: category*:string enum:animal|car|human|object|others|transportation query: ainvrIds?:integer |
| ivedaai_onvifA | IvedaAI API — Onvif operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/onvif/cameras — Discover onvif cameras POST /api/onvif/rtsps — List onvif camera rtsp body: CameraRequest — required: cameraType; ivedaai_get_schema for all fields |
| ivedaai_openidA | IvedaAI API — Openid operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. POST /api/openid-providers — Create OpenID provider body: OpenidProviderReq — required: clientCredentialScope, clientId, clientSecret, groupClaim, issuer, redirectUri; ivedaai_get_schema for all fields PUT /api/openid-providers/{openidProviderId} — Update OpenID provider path: openidProviderId*:string body: OpenidProviderReq — required: clientCredentialScope, clientId, clientSecret, groupClaim, issuer, redirectUri; ivedaai_get_schema for all fields POST /api/openid-providers/connection — Test connect with OpenID provider body: OpenidProviderReq — required: clientCredentialScope, clientId, clientSecret, groupClaim, issuer, redirectUri; ivedaai_get_schema for all fields |
| ivedaai_passwordA | IvedaAI API — Password operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/passwords — Get available token query: token*:string POST /api/passwords — Forget password by email body: { email*:string } POST /api/passwords/{keys} — Reset password by key path: keys*:string body: { password*:string, username*:string } GET /api/passwords/{keys}/expired — Check if the password reset key has expired path: keys*:string |
| ivedaai_pluginA | IvedaAI API — Plugin operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/plugins — List Plugins query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean POST /api/plugins — Import Plugin file: provide as {path, filename?, contentType?} — local file to upload as "file" form fields (pass via body): filePath?:string, password*:string, username*:string DELETE /api/plugins/{pluginId} — Delete Plugin by Id path: pluginId*:integer PATCH /api/plugins/{pluginId} — Update Plugin metadata by Id path: pluginId*:integer body: VoPlugin — ivedaai_get_schema for all fields |
| ivedaai_resourceA | IvedaAI API — Resource operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/resources — List resources query: direction?:string enum:asc|desc GET /api/resources/costs — Get resource cost of plugin POST /api/resources/estimation — Get estimation resource usage for recommend engines body: array of CameraAutoConfiguration — required: cameraId, recommendEngines; ivedaai_get_schema for all fields GET /api/resources/usage — Get resource information query: ainvrIds?:integer |
| ivedaai_roiA | IvedaAI API — Roi operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/rois — Find rois query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, ainvrIds?:integer, nameContains?:string, cameraIds?:integer, types?:string enum:CAMERA_ABNORMAL|CROWD_DETECTION|DWELL|FACE_RECOGNITION|FALL|HUMAN_ATTRIBUTE|INTRUSION|LPR, excludeUnused?:boolean, roiIds?:integer, roiParameters?:string POST /api/rois — Create roi body: RoiRequest — required: cameraId, condition, name, parameter, roiContour; ivedaai_get_schema for all fields DELETE /api/rois/{roiId} — Delete roi by id path: roiId*:integer GET /api/rois/{roiId} — Find roi by id path: roiId*:integer PATCH /api/rois/{roiId} — Patch roi path: roiId*:integer body: RoiRequest — required: cameraId, condition, name, parameter, roiContour; ivedaai_get_schema for all fields NOTE: GET /api/rois/{roiId} returns these fields under a different key — cameraId → camera.cameraId, condition → types, conditionLogic → logical, excludeRoiContour → excludedRegion, isEnabled → enabled, name → eventName, parameter → parameters, roiContour → region[].contour, type → eventType. This endpoint has been confirmed to leave omitted fields alone, so this is for reading the value, not a warning about losing it. PUT /api/rois/{roiId} — Update roi path: roiId*:integer body: RoiRequest — required: cameraId, condition, name, parameter, roiContour; ivedaai_get_schema for all fields NOTE: GET /api/rois/{roiId} returns these fields under a different key — cameraId → camera.cameraId, condition → types, conditionLogic → logical, excludeRoiContour → excludedRegion, isEnabled → enabled, name → eventName, parameter → parameters, roiContour → region[].contour, type → eventType. This endpoint has been confirmed to leave omitted fields alone, so this is for reading the value, not a warning about losing it. |
| ivedaai_sceneA | IvedaAI API — Scene operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/scenes — Search scenes query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, start*:string(yyyy-MM-dd HH:mm:ss), unpaged?:boolean, end*:string(yyyy-MM-dd HH:mm:ss), cameraIds?:integer, footageIds?:integer, query?:string, hashtags?:string, roiPoints?:number, allCameras?:boolean, allFootages?:boolean POST /api/scenes — Create scene file: provide as {path, filename?, contentType?} — local file to upload as "file" form fields (pass via body): cameraId*:integer, datetime?:string(yyyy-MM-dd'T'HH:mm:ss), forceSave?:boolean, frameIndex?:integer, hashtags?:string[], latitude?:number, longitude?:number, profileId?:integer, requiredEngines?:string, sceneObjects[0].confidence?:number, sceneObjects[0].h*:integer, sceneObjects[0].metadata.colors?:string[], sceneObjects[0].metadata.face.age?:integer, sceneObjects[0].metadata.face.ageGroup?:string enum:-|1-19|20-29|30-39|40-49|50-59|60-69|70-100, sceneObjects[0].metadata.face.categoryName?:string, sceneObjects[0].metadata.face.categoryUuid?:string, sceneObjects[0].metadata.face.confidence?:number, sceneObjects[0].metadata.face.emotion?:string enum:Angry|Happy|Neutral|Sad|Surprised|Unknown, sceneObjects[0].metadata.face.features*:number[], sceneObjects[0].metadata.face.gender?:string enum:Female|Male|Unknown, sceneObjects[0].metadata.face.matchConfidence?:number, sceneObjects[0].metadata.face.qualified?:boolean, sceneObjects[0].metadata.face.rect.height?:integer, sceneObjects[0].metadata.face.rect.width?:integer, sceneObjects[0].metadata.face.rect.x?:integer, sceneObjects[0].metadata.face.rect.y?:integer, sceneObjects[0].metadata.face.targetName?:string, sceneObjects[0].metadata.face.targetUuid?:string, sceneObjects[0].metadata.licensePlate.categoryId?:integer, sceneObjects[0].metadata.licensePlate.categoryName?:string, sceneObjects[0].metadata.licensePlate.categoryUuid?:string, sceneObjects[0].metadata.licensePlate.confidence?:number, sceneObjects[0].metadata.licensePlate.country?:string, sceneObjects[0].metadata.licensePlate.disabled?:boolean, sceneObjects[0].metadata.licensePlate.number?:string, sceneObjects[0].metadata.licensePlate.rect.height?:integer, sceneObjects[0].metadata.licensePlate.rect.width?:integer, sceneObjects[0].metadata.licensePlate.rect.x?:integer, sceneObjects[0].metadata.licensePlate.rect.y?:integer, sceneObjects[0].metadata.licensePlate.state?:string, sceneObjects[0].metadata.licensePlate.vehicleOwner?:string, sceneObjects[0].metadata.licensePlate.vehicleType?:string, sceneObjects[0].metadata.makeModel.make?:string, sceneObjects[0].metadata.makeModel.model?:string, sceneObjects[0].metadata.makeModel.possibility?:number, sceneObjects[0].metadata.mask.confidence?:number, sceneObjects[0].metadata.mask.hasMask?:boolean, sceneObjects[0].metadata.person.hasHelmet?:boolean, sceneObjects[0].metadata.person.hasVest?:boolean, sceneObjects[0].metadata.person.helmetConfidence?:number, sceneObjects[0].metadata.person.vestConfidence?:number, sceneObjects[0].metadata.speed?:string enum:AboveAverage|Average|BelowAverage, sceneObjects[0].objectType*:string, sceneObjects[0].w*:integer, sceneObjects[0].x*:integer, sceneObjects[0].y*:integer GET /api/scenes/{sceneId} — Get scene details path: sceneId*:integer PATCH /api/scenes/{sceneId} — update scene path: sceneId*:integer body: SceneUpdateRequest — ivedaai_get_schema for all fields GET /api/scenes/{sceneId}/{type} — Get original image path: sceneId*:integer, type*:string enum:Alert|CommonEvent|VideoSearch query: eventType?:string enum:CAMERA_ABNORMAL|CROWD_DETECTION|DWELL|FACE_RECOGNITION|FALL|HUMAN_ATTRIBUTE|INTRUSION|LPR GET /api/scenes/{sceneId}/objects — Get detail objects path: sceneId*:integer query: commonEventId?:integer, query?:string GET /api/scenes/{sceneId}/playback — Get scene's playback path: sceneId*:integer query: duration?:integer, start?:string(yyyy-MM-dd HH:mm:ss) POST /api/scenes/image — Search scenes by image file: provide as {path, filename?, contentType?} — local file to upload as "file" GET /api/scenes/metadata — Get example of create scene metadata GET /api/scenes/objects/count — Get total number of objects |
| ivedaai_scene_objectA | IvedaAI API — SceneObject operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/scene-objects/{id} — Find scene object by id path: id*:integer query: needDescriptor?:boolean GET /api/scene-objects/search — Search similar scene object query: offset?:integer, pageNumber?:integer, pageSize?:integer, paged?:boolean, sort.sorted?:boolean, sort.unsorted?:boolean, start*:string(yyyy-MM-dd HH:mm:ss), unpaged?:boolean, end*:string(yyyy-MM-dd HH:mm:ss), cameraIds?:integer, footageIds?:integer, allCameras?:boolean, allFootages?:boolean, queryObjIds*:integer, removedObjIds?:integer, similarity?:number POST /api/scene-objects/search — Search similar scene object query: allCameras?:boolean, allFootages?:boolean, cameraIds?:integer, descriptors*:string, end*:string(yyyy-MM-dd HH:mm:ss), footageIds?:integer, offset?:integer, pageNumber?:integer, pageSize?:integer, paged?:boolean, removedTargetDescriptors?:string, similarity?:number, sort.sorted?:boolean, sort.unsorted?:boolean, start*:string(yyyy-MM-dd HH:mm:ss), trackType*:string enum:Person|Vehicle, unpaged?:boolean POST /api/scene-objects/search/image — Search similar scene object by image file: provide as {path, filename?, contentType?} — local file to upload as "file" form fields (pass via body): allCameras?:boolean, allFootages?:boolean, cameraIds?:integer, end*:string(yyyy-MM-dd HH:mm:ss), footageIds?:integer, offset?:integer, pageNumber?:integer, pageSize?:integer, paged?:boolean, similarity?:number, sort.sorted?:boolean, sort.unsorted?:boolean, start*:string(yyyy-MM-dd HH:mm:ss), trackType*:string enum:Person|Vehicle, unpaged?:boolean |
| ivedaai_soundA | IvedaAI API — Sound operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/sounds — List sounds query: isDeleted?:boolean, types?:string enum:alert|all|intrusion POST /api/sounds — Upload sound query: type*:string enum:alert|all|intrusion file: provide as {path, filename?, contentType?} — local file to upload as "file" GET /api/sounds/{soundId} — Find sound by id path: soundId*:integer GET /api/sounds/findByType — Find sounds by event type query: type*:string enum:alert|all |
| ivedaai_sseA | IvedaAI API — Sse operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/system/events — Server sent event query: filter?:string enum:CameraAbnormal|ChannelEstablished|Cluster|ClusterAbnormal|ClusterSync|EngineModelFailed|EngineModelLoaded|EngineModelLoading, streamCameraIds?:integer |
| ivedaai_statisticA | IvedaAI API — Statistic operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/statistic/heatmap — Generate heatmap query: start*:string(yyyy-MM-dd HH:mm:ss), end*:string(yyyy-MM-dd HH:mm:ss), cameraId?:integer, footageId?:integer, query?:string, fineness?:integer, threshold?:number, forceRefresh?:boolean |
| ivedaai_streamingA | IvedaAI API — Streaming operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/streaming/{cameraId}/{type}.jpg — Get camera streaming image path: cameraId*:integer, type*:string enum:live GET /api/streaming/{cameraId}/{type}.mjpeg — Get camera streaming motion jpeg path: cameraId*:integer, type*:string enum:live |
| ivedaai_timeA | IvedaAI API — Time operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/time — Find time configurations |
| ivedaai_trackingA | IvedaAI API — Tracking operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. PUT /api/cameras/{cameraId}/tracking — Set AI tracking target path: cameraId*:integer query: targetId*:integer |
| ivedaai_user_groupA | IvedaAI API — UserGroup operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. GET /api/user-groups — List user group query: nameContains?:string, offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean POST /api/user-groups — Create user group body: UserGroupRequest — required: externalId, name; ivedaai_get_schema for all fields DELETE /api/user-groups/{userGroupId} — Delete user group path: userGroupId*:string PATCH /api/user-groups/{userGroupId} — Patch user group path: userGroupId*:string body: UserGroupRequest — required: externalId, name; ivedaai_get_schema for all fields CAUTION: this endpoint nulls "externalId" if the body omits it, and still returns 200. Send the full object, including the current value of that field. Omitting it is refused by this tool; pass it as null to clear it deliberately. NOTE: "accountIds" is not on the record at all, but a second endpoint returns it — read accountIds from GET /api/user-groups/{userGroupId}/accounts at content[].accountId. Read it there if you need the current value. PUT /api/user-groups/{userGroupId} — Update user group path: userGroupId*:string body: UserGroupRequest — required: externalId, name; ivedaai_get_schema for all fields NOTE: "accountIds" is not on the record at all, but a second endpoint returns it — read accountIds from GET /api/user-groups/{userGroupId}/accounts at content[].accountId. Read it there if you need the current value. DELETE /api/user-groups/{userGroupId}/accounts — Remove user from group path: userGroupId*:string body: array of integer GET /api/user-groups/{userGroupId}/accounts — List user in group path: userGroupId*:string query: offset?:integer, page?:any, pageNumber?:integer, pageSize?:integer, paged?:boolean, size?:any, sort?:any, sort.sorted?:boolean, sort.unsorted?:boolean, unpaged?:boolean, nameContains?:string POST /api/user-groups/{userGroupId}/accounts — Add users to group path: userGroupId*:string body: array of integer PUT /api/user-groups/{userGroupId}/accounts — Set users in group path: userGroupId*:string body: array of integer GET /api/user-groups/{userGroupId}/permissions — List user group permissions path: userGroupId*:string query: type?:string enum:Camera|FaceCategory|LicensePlateCategory POST /api/user-groups/{userGroupId}/permissions — Grant user group permissions path: userGroupId*:string body: array of Permission — required: actions, id, type; ivedaai_get_schema for all fields |
| ivedaai_utilityB | IvedaAI API — Utility operations. Response JSON: "status" is the HTTP status code; "truncated"/"timedOut" flag a cut-off response. POST /api/utility — Diagnose System query: method*:string, target*:string, parameters?:string |
| ivedaai_get_schemaA | Looks up the full JSON schema for a named IvedaAI API definition (e.g. "CameraRequest"). Use this when a tool's body schema summary is truncated or you need the exact shape of a nested field. Call ivedaai_get_schema with no name to list all available definition names. |
| ivedaai_alert_integrationA | Configures and tests AlertRule.trigger — the mechanism that routes IvedaAI alerts to external systems (generic HTTP webhooks, named VMS/PSIM platforms, email, Immix, mobile push). The raw API schema here is deeply nested and has undocumented gotchas (see below), confirmed by live testing rather than the spec alone. Actions:
list_types — no API call; returns this same type/testability reference as JSON.
test — builds the correct trigger payload for Config shape by category: webhook (request): { method, url, headers?, params?, authorization?, httpBody? } — authorization/httpBody default to {auth:"NONE"}/{type:"NONE"} automatically; the server requires them present even when unused, despite the spec marking them optional. vms (13 named platforms): { ip, port, username?, password?, protocol?, severity?, cameraIds?, ... } — see ivedaai_get_schema("AlertTriggerNvr") for the full field list. mail/immix: { emails: [{mailIds?, subject?, content?}], smtpServer, port } mobile: { enableCriticalAlertNotice? } (all fields optional) Type reference: WEBHOOK: request — testable — Generic outbound HTTP webhook — POST/GET/etc. to any URL. MOBILE: mobile — testable — Push notification to the IvedaAI mobile app. VMS: milestone — testable — Milestone VMS/PSIM integration. Live-testable, but how long a failed connection takes to report back is unpredictable — repeated tests against the same unreachable address varied from under a second to ~24 seconds in testing, seemingly based on real-time network conditions (immediate rejection vs. a silent connect timeout) rather than being a fixed property of any one vendor. Use a generous timeout regardless of which VMS type you're testing. genetec — testable — Genetec VMS/PSIM integration. Live-testable, but how long a failed connection takes to report back is unpredictable — repeated tests against the same unreachable address varied from under a second to ~24 seconds in testing, seemingly based on real-time network conditions (immediate rejection vs. a silent connect timeout) rather than being a fixed property of any one vendor. Use a generous timeout regardless of which VMS type you're testing. nx — testable — Nx VMS/PSIM integration. Live-testable, but how long a failed connection takes to report back is unpredictable — repeated tests against the same unreachable address varied from under a second to ~24 seconds in testing, seemingly based on real-time network conditions (immediate rejection vs. a silent connect timeout) rather than being a fixed property of any one vendor. Use a generous timeout regardless of which VMS type you're testing. dw — testable — Dw VMS/PSIM integration. Live-testable, but how long a failed connection takes to report back is unpredictable — repeated tests against the same unreachable address varied from under a second to ~24 seconds in testing, seemingly based on real-time network conditions (immediate rejection vs. a silent connect timeout) rather than being a fixed property of any one vendor. Use a generous timeout regardless of which VMS type you're testing. lux — testable — Lux VMS/PSIM integration. Live-testable, but how long a failed connection takes to report back is unpredictable — repeated tests against the same unreachable address varied from under a second to ~24 seconds in testing, seemingly based on real-time network conditions (immediate rejection vs. a silent connect timeout) rather than being a fixed property of any one vendor. Use a generous timeout regardless of which VMS type you're testing. salient — testable — Salient VMS/PSIM integration. Live-testable, but how long a failed connection takes to report back is unpredictable — repeated tests against the same unreachable address varied from under a second to ~24 seconds in testing, seemingly based on real-time network conditions (immediate rejection vs. a silent connect timeout) rather than being a fixed property of any one vendor. Use a generous timeout regardless of which VMS type you're testing. axis — testable — Axis VMS/PSIM integration. Live-testable, but how long a failed connection takes to report back is unpredictable — repeated tests against the same unreachable address varied from under a second to ~24 seconds in testing, seemingly based on real-time network conditions (immediate rejection vs. a silent connect timeout) rather than being a fixed property of any one vendor. Use a generous timeout regardless of which VMS type you're testing. ocularis — testable — Ocularis VMS/PSIM integration. Live-testable, but how long a failed connection takes to report back is unpredictable — repeated tests against the same unreachable address varied from under a second to ~24 seconds in testing, seemingly based on real-time network conditions (immediate rejection vs. a silent connect timeout) rather than being a fixed property of any one vendor. Use a generous timeout regardless of which VMS type you're testing. digifort — testable — Digifort VMS/PSIM integration. Live-testable, but how long a failed connection takes to report back is unpredictable — repeated tests against the same unreachable address varied from under a second to ~24 seconds in testing, seemingly based on real-time network conditions (immediate rejection vs. a silent connect timeout) rather than being a fixed property of any one vendor. Use a generous timeout regardless of which VMS type you're testing. avigilon — testable — Avigilon VMS/PSIM integration. Live-testable, but how long a failed connection takes to report back is unpredictable — repeated tests against the same unreachable address varied from under a second to ~24 seconds in testing, seemingly based on real-time network conditions (immediate rejection vs. a silent connect timeout) rather than being a fixed property of any one vendor. Use a generous timeout regardless of which VMS type you're testing. hanwha — testable — Hanwha VMS/PSIM integration. Live-testable, but how long a failed connection takes to report back is unpredictable — repeated tests against the same unreachable address varied from under a second to ~24 seconds in testing, seemingly based on real-time network conditions (immediate rejection vs. a silent connect timeout) rather than being a fixed property of any one vendor. Use a generous timeout regardless of which VMS type you're testing. amag — testable — Amag VMS/PSIM integration. Live-testable, but how long a failed connection takes to report back is unpredictable — repeated tests against the same unreachable address varied from under a second to ~24 seconds in testing, seemingly based on real-time network conditions (immediate rejection vs. a silent connect timeout) rather than being a fixed property of any one vendor. Use a generous timeout regardless of which VMS type you're testing. idis — testable — Idis VMS/PSIM integration. Live-testable, but how long a failed connection takes to report back is unpredictable — repeated tests against the same unreachable address varied from under a second to ~24 seconds in testing, seemingly based on real-time network conditions (immediate rejection vs. a silent connect timeout) rather than being a fixed property of any one vendor. Use a generous timeout regardless of which VMS type you're testing. MAIL: mail — NOT testable via 'test' — SMTP email notification. Not live-testable via POST /api/alertTriggers (confirmed: returns "Unsupported check connection alert trigger type"). immix — NOT testable via 'test' — Immix alarm-monitoring-station notification. Shares mail's underlying type; not live-testable either (confirmed). |
| ivedaai_add_cameraA | Adds one or more cameras (e.g. from a list of IPs or RTSP stream URLs) and starts their connection. The raw CameraRequest schema has undocumented gotchas confirmed by live testing:
Only IMPORTANT: activation starting successfully does NOT mean the stream is actually connected — that can take anywhere from under a second to failing after 90+ seconds with no error at all (observed live), which usually indicates a network-reachability problem between the IvedaAI server and the camera, not a problem with this tool. Check back later with the returned |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/WillORepO/ivedaAI-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server