{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-05T15:48:56.486Z","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain","markdownUrl":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain.md","server":{"slug":"io-usefulapi-safetychain","name":"SafetyChain MCP by usefulapi","registryName":"io.usefulapi/safetychain","description":"Read SafetyChain food safety records, CAPAs, forms, suppliers, items, locations and equipment.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"safetychain","type":"remote","identifier":"https://safetychain.usefulapi.io/mcp","withdrawn":false,"url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain","version":"1.13.3","transport":null,"scoredAt":"2026-11-05T15:04:50.113Z"},"score":{"total":18,"tier":"low","status":"scored","weekDelta":-45,"history":[{"date":"2026-11-05","total":18},{"date":"2026-11-04","total":18},{"date":"2026-11-03","total":18},{"date":"2026-11-02","total":18},{"date":"2026-11-01","total":68},{"date":"2026-10-31","total":67},{"date":"2026-10-30","total":64},{"date":"2026-10-29","total":63},{"date":"2026-10-28","total":63},{"date":"2026-10-27","total":62},{"date":"2026-10-26","total":62}]},"categories":[{"name":"Endpoint Security","score":46,"verdict":"fail","reasons":["The endpoint's TLS certificate is valid, in date, and uses a strong key.","Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.","HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.","HSTS check failed: the Strict-Transport-Security header is absent.","DNSSEC check failed: this domain isn't protected by DNSSEC."],"codes":[{"code":"tls.valid","args":{}},{"code":"auth.unreachable","args":{}},{"code":"https.inconclusive","args":{"reason":"redirect_not_https"}},{"code":"headers.hsts_absent","args":{}},{"code":"dnssec.absent","args":{}}]},{"name":"Transport & Reachability","score":0,"verdict":"fail","reasons":["Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly."],"codes":[{"code":"transport.redirected","args":{"transport":"streamable-http"}}]},{"name":"Schema Quality & AI Usability","score":0,"verdict":"unverified","reasons":["Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list."],"codes":[{"code":"schema.unreachable","args":{}}]},{"name":"Stability & Change Management","score":0,"verdict":"unverified","reasons":["Stability not yet verified: not enough scan history yet (needs a 30-day window)."],"codes":[{"code":"stability.insufficient_history","args":{}}]},{"name":"Tool Coverage","score":0,"verdict":"unverified","reasons":["Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list."],"codes":[{"code":"toolquality.unreachable","args":{}}]},{"name":"Tool Safety","score":0,"verdict":"unverified","reasons":["Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list."],"codes":[{"code":"toolsafety.unreachable","args":{}}]},{"name":"Capabilities","score":0,"verdict":"unverified","reasons":["Capabilities not yet verified: we couldn't read the endpoint's capabilities."],"codes":[{"code":"cap.unreachable","args":{}}]}],"inconclusive":["Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.","HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.","Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.","Stability not yet verified: not enough scan history yet (needs a 30-day window).","Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.","Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.","Capabilities not yet verified: we couldn't read the endpoint's capabilities."],"malware":[],"components":[{"slug":"safetychain","type":"remote","identifier":"https://safetychain.usefulapi.io/mcp","withdrawn":false,"score":18,"current":true,"url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain","markdownUrl":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain.md"}],"facts":[{"label":"Endpoint","value":"https://safetychain.usefulapi.io/mcp"},{"label":"Transports","value":"streamable-http"},{"label":"Auth","value":"none"},{"label":"Version","value":"1.13.3"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"safetychain_list_customers","title":"List customers","description":"List customers of the SafetyChain tenant, with ids, names, enabled flags and created/modified dates. Filter by name. The API does not page: all matches come back (cut at limit). GET /clientapis/resourcemanagement/v1.0/customers.","inputs":[{"name":"is_deleted","type":"boolean","required":false,"description":"Only deleted (true) or not deleted (false) rows."},{"name":"is_enabled","type":"boolean","required":false,"description":"Only enabled (true) or disabled (false) rows."},{"name":"limit","type":"integer","required":false,"description":"Return at most this many rows (default 200, max 1000); the reply says how many were cut."},{"name":"name","type":"string","required":false,"description":"Filter by customer name."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":146},{"name":"safetychain_get_customer","title":"Get customer","description":"Get one customer by id (an id from safetychain_list_customers). GET /clientapis/resourcemanagement/v1.0/customer/{id}.","inputs":[{"name":"id","type":"string","required":true,"description":"customer id"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":50},{"name":"safetychain_list_locations","title":"List locations","description":"List locations (plants, sites, areas) of the SafetyChain tenant, with ids, names, enabled flags and created/modified dates. Filter by name. The API does not page: all matches come back (cut at limit). GET /clientapis/resourcemanagement/v1.0/locations.","inputs":[{"name":"is_deleted","type":"boolean","required":false,"description":"Only deleted (true) or not deleted (false) rows."},{"name":"is_enabled","type":"boolean","required":false,"description":"Only enabled (true) or disabled (false) rows."},{"name":"limit","type":"integer","required":false,"description":"Return at most this many rows (default 200, max 1000); the reply says how many were cut."},{"name":"name","type":"string","required":false,"description":"Filter by location name."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":152},{"name":"safetychain_get_location","title":"Get location","description":"Get one location by id (an id from safetychain_list_locations). GET /clientapis/resourcemanagement/v1.0/location/{id}.","inputs":[{"name":"id","type":"string","required":true,"description":"location id"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":49},{"name":"safetychain_list_suppliers","title":"List suppliers","description":"List suppliers of the SafetyChain tenant, with ids, names, enabled flags and created/modified dates. Filter by name. The API does not page: all matches come back (cut at limit). GET /clientapis/resourcemanagement/v1.0/suppliers.","inputs":[{"name":"is_deleted","type":"boolean","required":false,"description":"Only deleted (true) or not deleted (false) rows."},{"name":"is_enabled","type":"boolean","required":false,"description":"Only enabled (true) or disabled (false) rows."},{"name":"limit","type":"integer","required":false,"description":"Return at most this many rows (default 200, max 1000); the reply says how many were cut."},{"name":"name","type":"string","required":false,"description":"Filter by supplier name."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":147},{"name":"safetychain_get_supplier","title":"Get supplier","description":"Get one supplier by id (an id from safetychain_list_suppliers). GET /clientapis/resourcemanagement/v1.0/supplier/{id}.","inputs":[{"name":"id","type":"string","required":true,"description":"supplier id"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":51},{"name":"safetychain_list_items","title":"List items","description":"List items (products, ingredients, materials) of the SafetyChain tenant, with ids, names, enabled flags and created/modified dates. Filter by name. The API does not page: all matches come back (cut at limit). GET /clientapis/resourcemanagement/v1.0/items.","inputs":[{"name":"is_deleted","type":"boolean","required":false,"description":"Only deleted (true) or not deleted (false) rows."},{"name":"is_enabled","type":"boolean","required":false,"description":"Only enabled (true) or disabled (false) rows."},{"name":"limit","type":"integer","required":false,"description":"Return at most this many rows (default 200, max 1000); the reply says how many were cut."},{"name":"name","type":"string","required":false,"description":"Filter by item name."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":151},{"name":"safetychain_get_item","title":"Get item","description":"Get one item by id (an id from safetychain_list_items). GET /clientapis/resourcemanagement/v1.0/item/{id}.","inputs":[{"name":"id","type":"string","required":true,"description":"item id"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":49},{"name":"safetychain_list_equipment","title":"List equipment","description":"List equipment of the SafetyChain tenant, with ids, names, enabled flags and created/modified dates. Filter by name. The API does not page: all matches come back (cut at limit). GET /clientapis/resourcemanagement/v1.0/equipment.","inputs":[{"name":"is_deleted","type":"boolean","required":false,"description":"Only deleted (true) or not deleted (false) rows."},{"name":"is_enabled","type":"boolean","required":false,"description":"Only enabled (true) or disabled (false) rows."},{"name":"limit","type":"integer","required":false,"description":"Return at most this many rows (default 200, max 1000); the reply says how many were cut."},{"name":"name","type":"string","required":false,"description":"Filter by equipment name."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":146},{"name":"safetychain_get_equipment","title":"Get equipment","description":"Get one equipment by id (an id from safetychain_list_equipment). GET /clientapis/resourcemanagement/v1.0/equipment/{id}.","inputs":[{"name":"id","type":"string","required":true,"description":"equipment id"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":52},{"name":"safetychain_list_resources","title":"List resources","description":"List resources of every type (customers, equipment, items, suppliers, lists) of the SafetyChain tenant, with ids, names, enabled flags and created/modified dates. Filter by name. The API does not page: all matches come back (cut at limit). GET /clientapis/resourcemanagement/v1.0/resources.","inputs":[{"name":"is_enabled","type":"boolean","required":false,"description":"Only enabled (true) or disabled (false) rows."},{"name":"limit","type":"integer","required":false,"description":"Return at most this many rows (default 200, max 1000); the reply says how many were cut."},{"name":"name","type":"string","required":false,"description":"Filter by resource name."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":138},{"name":"safetychain_get_resource","title":"Get resource","description":"Get one resource by id (an id from safetychain_list_resources). GET /clientapis/resourcemanagement/v1.0/resource/{id}.","inputs":[{"name":"id","type":"string","required":true,"description":"resource id"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":49},{"name":"safetychain_list_forms","title":"List forms","description":"List forms (the checklists and data-entry forms operators fill in) of the SafetyChain tenant, with ids, names, enabled flags and created/modified dates. Filter by name. The API does not page: all matches come back (cut at limit). GET /clientapis/resourcemanagement/v1.0/forms.","inputs":[{"name":"is_current","type":"boolean","required":false,"description":"Only the current version of each form (true)."},{"name":"is_released","type":"boolean","required":false,"description":"Only released (true) or unreleased (false) forms."},{"name":"limit","type":"integer","required":false,"description":"Return at most this many rows (default 200, max 1000); the reply says how many were cut."},{"name":"name","type":"string","required":false,"description":"Filter by form name."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":155},{"name":"safetychain_get_form","title":"Get form","description":"Get one form by id (an id from safetychain_list_forms). GET /clientapis/resourcemanagement/v1.0/form/{id}.","inputs":[{"name":"id","type":"string","required":true,"description":"form id"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":49},{"name":"safetychain_list_categories","title":"List categories","description":"List categories used to group resources of the SafetyChain tenant, with ids, names, enabled flags and created/modified dates. Filter by name. The API does not page: all matches come back (cut at limit). GET /clientapis/resourcemanagement/v1.0/categories.","inputs":[{"name":"is_deleted","type":"boolean","required":false,"description":"Only deleted (true) or not deleted (false) rows."},{"name":"is_enabled","type":"boolean","required":false,"description":"Only enabled (true) or disabled (false) rows."},{"name":"limit","type":"integer","required":false,"description":"Return at most this many rows (default 200, max 1000); the reply says how many were cut."},{"name":"name","type":"string","required":false,"description":"Filter by category name."},{"name":"parent_category_id","type":"string","required":false,"description":"Only children of this category id."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":163},{"name":"safetychain_get_category","title":"Get category","description":"Get one category by id (an id from safetychain_list_categories). GET /clientapis/resourcemanagement/v1.0/category/{id}.","inputs":[{"name":"id","type":"string","required":true,"description":"category id"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":49},{"name":"safetychain_search_capas","title":"Search CAPAs","description":"Search corrective and preventive actions (CAPA, SCAR, CCAR). Filters combine with AND. Returns id, name, severity, owner workgroup, status, event and due dates, task counts, location and template type, 50 per page. Use the Id (a GUID) with safetychain_get_capa and the other CAPA tools. POST /clientapis/capamanagement/v1.0/capas (a read: it only searches).","inputs":[{"name":"capa_id","type":"integer","required":false,"description":"The numeric CAPA number (CapaId)."},{"name":"descending","type":"boolean","required":false,"description":"Sort descending."},{"name":"locations","type":"array","required":false,"description":"Location names or ids (up to 10)."},{"name":"name_contains","type":"string","required":false,"description":"CAPA name contains this text."},{"name":"owner_workgroup_contains","type":"string","required":false,"description":"Owner workgroup contains this text."},{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1)."},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (default 50, max 200)."},{"name":"search_term","type":"string","required":false,"description":"Free-text search term."},{"name":"severities","type":"array","required":false,"description":"Severity names (up to 10)."},{"name":"statuses","type":"array","required":false,"description":"CAPA statuses, for example Draft, Open, Closed, Voided (up to 10)."},{"name":"template_types","type":"array","required":false,"description":"Template types."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":275},{"name":"safetychain_get_capa","title":"Get CAPA","description":"Get one CAPA's details: status, severity, event and due dates, summary, creator, resource, source, category, owner workgroup, template and steps. The id is the GUID `Id` from safetychain_search_capas. GET /clientapis/capamanagement/v1.0/capa/{id}.","inputs":[{"name":"id","type":"string","required":true,"description":"CAPA id (GUID)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":89},{"name":"safetychain_get_capa_tasks","title":"Get CAPA tasks","description":"List a CAPA's tasks (step, form, location, resource, workgroup, assignee, due date, status). The id is the GUID `Id` from safetychain_search_capas. GET /clientapis/capamanagement/v1.0/capa/{id}/tasks.","inputs":[{"name":"id","type":"string","required":true,"description":"CAPA id (GUID)"},{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1)."},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (default 50, max 200)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":120},{"name":"safetychain_get_capa_attachments","title":"Get CAPA attachments","description":"List a CAPA's attachments (name, extension, link, creator, date). The id is the GUID `Id` from safetychain_search_capas. GET /clientapis/capamanagement/v1.0/capa/{id}/attachments.","inputs":[{"name":"id","type":"string","required":true,"description":"CAPA id (GUID)"},{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1)."},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (default 50, max 200)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":112},{"name":"safetychain_get_capa_history","title":"Get CAPA history","description":"List a CAPA's history entries. The id is the GUID `Id` from safetychain_search_capas. GET /clientapis/capamanagement/v1.0/capa/{id}/history.","inputs":[{"name":"id","type":"string","required":true,"description":"CAPA id (GUID)"},{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1)."},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (default 50, max 200)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":102},{"name":"safetychain_get_capa_linked_records","title":"Get CAPA linked records","description":"List a CAPA's linked records. The id is the GUID `Id` from safetychain_search_capas. GET /clientapis/capamanagement/v1.0/capa/{id}/linkedrecords.","inputs":[{"name":"id","type":"string","required":true,"description":"CAPA id (GUID)"},{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1)."},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (default 50, max 200)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":105},{"name":"safetychain_get_capa_linked_capas","title":"Get CAPA linked capas","description":"List a CAPA's linked CAPAs. The id is the GUID `Id` from safetychain_search_capas. GET /clientapis/capamanagement/v1.0/capa/{id}/linkedcapas.","inputs":[{"name":"id","type":"string","required":true,"description":"CAPA id (GUID)"},{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1)."},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (default 50, max 200)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":108},{"name":"safetychain_get_capa_activity","title":"Get CAPA activity","description":"List a CAPA's activity (comments and events). The id is the GUID `Id` from safetychain_search_capas. GET /clientapis/capamanagement/v1.0/capa/{id}/activity.","inputs":[{"name":"id","type":"string","required":true,"description":"CAPA id (GUID)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":69},{"name":"safetychain_get_record","title":"Get record","description":"Get one submitted record in full by its record id (the GUID `recordId` from safetychain_search_records): form, who submitted it and when, location, resource, field values, verifications. GET /clientapis/recordmanagement/v1.0/record/{recordId}.","inputs":[{"name":"record_id","type":"string","required":true,"description":"Record id (GUID)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":80},{"name":"safetychain_record_exists","title":"Check a record exists","description":"Check whether a record exists for a record id (GUID). GET /clientapis/recordmanagement/v1.0/record/{recordId}/Exists.","inputs":[{"name":"record_id","type":"string","required":true,"description":"Record id (GUID)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":53},{"name":"safetychain_search_records","title":"Search records","description":"Search submitted records (the headers: record number, compliance, submitted date, location, form and version, resource, who submitted, signed, verifications, ids). Filter by date range, form, location, resource, identifier and compliance. Always narrow by a date range or a name: the tenant can hold millions of records. Pages are not snapshotted: for a stable multi-page read use a closed date range (start and end in the past). Use safetychain_get_record_fields for the field values. POST /clientapis/v2.0/getRecords (a read: it only searches).","inputs":[{"name":"date_type","type":"string","required":false,"description":"Which date the range applies to (default submitted). processed = when SafetyChain saved it; modified = last change (includes submitted when never modified); modifiedOnly = only records actually modif…"},{"name":"end","type":"string","required":false,"description":"End of the date range (default: now)."},{"name":"form_like","type":"string","required":false,"description":"Form name contains this text (slower than form_name)."},{"name":"form_name","type":"string","required":false,"description":"Exact form name."},{"name":"identifier_name","type":"string","required":false,"description":"Identifier field name, for example Lot. Use together with identifier_value."},{"name":"identifier_value","type":"string","required":false,"description":"Identifier value that goes with identifier_name."},{"name":"is_signed","type":"boolean","required":false,"description":"Only records with a sign-off or validation."},{"name":"is_verified","type":"boolean","required":false,"description":"Only verified (true) records."},{"name":"location_like","type":"string","required":false,"description":"Location name contains this text (slower)."},{"name":"location_name","type":"string","required":false,"description":"Exact location name."},{"name":"min_ago","type":"integer","required":false,"description":"Sliding window: records from the last N minutes (1440 = a day). Not together with start."},{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1)."},{"name":"page_rows","type":"integer","required":false,"description":"Rows per page (default 50, max 500)."},{"name":"record_compliance","type":"boolean","required":false,"description":"Only compliant (true) or non-compliant (false) records. Records without compliance rules count as compliant."},{"name":"record_number","type":"integer","required":false,"description":"One record number."},{"name":"resource_like","type":"string","required":false,"description":"Resource name contains this text (slower)."},{"name":"resource_name","type":"string","required":false,"description":"Exact resource name (customer, equipment, item or supplier)."},{"name":"start","type":"string","required":false,"description":"Start of the date range, yyyy-mm-dd or yyyy-mm-dd hh:mm:ss. Not together with min_ago."},{"name":"time_zone_offset","type":"integer","required":false,"description":"Hours from UTC applied to the date filters and the dates returned (default 0)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":510},{"name":"safetychain_get_record_fields","title":"Get record field values","description":"Get the field-level values of records (one entry per record with its fields: name, short name, type, value, unit, compliance, min, max, target, comments, section). Same filters as safetychain_search_records; narrow strongly (a record number or one form and a short date range), each record carries many fields. POST /clientapis/v2.0/getRecordsWithFields (a read).","inputs":[{"name":"date_type","type":"string","required":false,"description":"Which date the range applies to (default submitted). processed = when SafetyChain saved it; modified = last change (includes submitted when never modified); modifiedOnly = only records actually modif…"},{"name":"end","type":"string","required":false,"description":"End of the date range (default: now)."},{"name":"field_names","type":"array","required":false,"description":"Only these fields, by full field name."},{"name":"field_short_names","type":"array","required":false,"description":"Only these fields, by short name."},{"name":"form_like","type":"string","required":false,"description":"Form name contains this text (slower than form_name)."},{"name":"form_name","type":"string","required":false,"description":"Exact form name."},{"name":"identifier_name","type":"string","required":false,"description":"Identifier field name, for example Lot. Use together with identifier_value."},{"name":"identifier_value","type":"string","required":false,"description":"Identifier value that goes with identifier_name."},{"name":"is_signed","type":"boolean","required":false,"description":"Only records with a sign-off or validation."},{"name":"is_verified","type":"boolean","required":false,"description":"Only verified (true) records."},{"name":"location_like","type":"string","required":false,"description":"Location name contains this text (slower)."},{"name":"location_name","type":"string","required":false,"description":"Exact location name."},{"name":"min_ago","type":"integer","required":false,"description":"Sliding window: records from the last N minutes (1440 = a day). Not together with start."},{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1)."},{"name":"page_rows","type":"integer","required":false,"description":"Records per page (default 20, max 100)."},{"name":"record_compliance","type":"boolean","required":false,"description":"Only compliant (true) or non-compliant (false) records. Records without compliance rules count as compliant."},{"name":"record_number","type":"integer","required":false,"description":"One record number."},{"name":"resource_like","type":"string","required":false,"description":"Resource name contains this text (slower)."},{"name":"resource_name","type":"string","required":false,"description":"Exact resource name (customer, equipment, item or supplier)."},{"name":"start","type":"string","required":false,"description":"Start of the date range, yyyy-mm-dd or yyyy-mm-dd hh:mm:ss. Not together with min_ago."},{"name":"time_zone_offset","type":"integer","required":false,"description":"Hours from UTC applied to the date filters and the dates returned (default 0)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":506},{"name":"safetychain_get_record_summary","title":"Summarize records","description":"Fast summary of the records matching the filters: first and last date, and how many forms, resources, locations and users are involved. Use it to size a request before safetychain_search_records. POST /clientapis/v2.0/getRecordSummary (a read).","inputs":[{"name":"date_type","type":"string","required":false,"description":"Which date the range applies to (default submitted). processed = when SafetyChain saved it; modified = last change (includes submitted when never modified); modifiedOnly = only records actually modif…"},{"name":"end","type":"string","required":false,"description":"End of the date range (default: now)."},{"name":"form_like","type":"string","required":false,"description":"Form name contains this text (slower than form_name)."},{"name":"form_name","type":"string","required":false,"description":"Exact form name."},{"name":"identifier_name","type":"string","required":false,"description":"Identifier field name, for example Lot. Use together with identifier_value."},{"name":"identifier_value","type":"string","required":false,"description":"Identifier value that goes with identifier_name."},{"name":"is_signed","type":"boolean","required":false,"description":"Only records with a sign-off or validation."},{"name":"is_verified","type":"boolean","required":false,"description":"Only verified (true) records."},{"name":"location_like","type":"string","required":false,"description":"Location name contains this text (slower)."},{"name":"location_name","type":"string","required":false,"description":"Exact location name."},{"name":"min_ago","type":"integer","required":false,"description":"Sliding window: records from the last N minutes (1440 = a day). Not together with start."},{"name":"record_compliance","type":"boolean","required":false,"description":"Only compliant (true) or non-compliant (false) records. Records without compliance rules count as compliant."},{"name":"record_number","type":"integer","required":false,"description":"One record number."},{"name":"resource_like","type":"string","required":false,"description":"Resource name contains this text (slower)."},{"name":"resource_name","type":"string","required":false,"description":"Exact resource name (customer, equipment, item or supplier)."},{"name":"start","type":"string","required":false,"description":"Start of the date range, yyyy-mm-dd or yyyy-mm-dd hh:mm:ss. Not together with min_ago."},{"name":"time_zone_offset","type":"integer","required":false,"description":"Hours from UTC applied to the date filters and the dates returned (default 0)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":408}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T15:04:50.000Z","track":"remote","endpoint":"https://safetychain.usefulapi.io/mcp","declaredUrl":null,"truncated":false,"tls":{"outcome":"valid","label":"Valid","version":"TLS 1.3","cipherSuite":"TLS_AES_128_GCM_SHA256","chainError":null,"certificates":[{"subject":"CN=usefulapi.io","issuer":"CN=WE1,O=Google Trust Services,C=US","notBefore":"2026-09-13T08:55:39Z","notAfter":"2026-12-12T09:54:12Z","keyType":"ECDSA","keyBits":256,"isCa":false},{"subject":"CN=WE1,O=Google Trust Services,C=US","issuer":"CN=GTS Root R4,O=Google Trust Services LLC,C=US","notBefore":"2023-12-13T09:00:00Z","notAfter":"2029-02-20T14:00:00Z","keyType":"ECDSA","keyBits":256,"isCa":true},{"subject":"CN=GTS Root R4,O=Google Trust Services LLC,C=US","issuer":"CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE","notBefore":"2023-11-15T03:43:21Z","notAfter":"2028-01-28T00:00:42Z","keyType":"ECDSA","keyBits":384,"isCa":true}]},"dnssec":{"result":"insecure","label":"Not signed","name":"safetychain.usefulapi.io.","steps":[{"zone":".","outcome":"verified","label":"Verified"},{"zone":"io.","outcome":"verified","label":"Verified"},{"zone":"usefulapi.io.","outcome":"insecure_proven","label":"Unsigned (proven)"}]},"auth":{"outcome":"inconclusive","label":"Inconclusive","gate":null,"gateLabel":null,"status":302,"authorizationServers":[]},"httpsRedirect":{"outcome":"inconclusive","label":"Inconclusive","status":302},"transports":[{"transport":"streamable-http","outcome":"redirected","label":"Redirected","status":302,"followed":false}],"provenance":null,"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-10-26","recent":[{"id":"chg_01a19ab6-0989-79c7-8e80-789245b84ba9","kind":"check.unverifiable","summary":"Tool safety (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a19ab6-0989-79c7-8e80-789245b84ba9"},{"id":"chg_01a19ab6-098a-79b1-b706-0174d92393f7","kind":"check.unverifiable","summary":"Authorization (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a19ab6-098a-79b1-b706-0174d92393f7"},{"id":"chg_01a19ab6-098a-7e4e-943d-da2a1eb4ac4d","kind":"check.unverifiable","summary":"Stability (0.20 → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a19ab6-098a-7e4e-943d-da2a1eb4ac4d"},{"id":"chg_01a19ab6-098b-7685-b0dc-890244b035cf","kind":"check.unverifiable","summary":"Schema quality (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a19ab6-098b-7685-b0dc-890244b035cf"},{"id":"chg_01a19ab6-098b-7bcb-b555-4ed749d2dfd3","kind":"check.unverifiable","summary":"Capabilities (pass → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a19ab6-098b-7bcb-b555-4ed749d2dfd3"},{"id":"chg_01a19ab6-098c-7044-ac62-7ba961b2d696","kind":"check.unverifiable","summary":"Tool coverage (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a19ab6-098c-7044-ac62-7ba961b2d696"},{"id":"chg_01a19ab6-098c-74c6-8db0-704d1e12f85e","kind":"capture.status_changed","summary":"Endpoint reachability (reachable → not serving MCP)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a19ab6-098c-74c6-8db0-704d1e12f85e"},{"id":"chg_01a19ab6-098c-79d5-975d-46a21a121314","kind":"score.total_changed","summary":"Trust score (68 → 18)","materiality":"functional","direction":"regression","scoreDelta":-50,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a19ab6-098c-79d5-975d-46a21a121314"},{"id":"chg_01a1958b-22d2-7328-8839-4824730e6790","kind":"score.total_changed","summary":"Trust score (67 → 68)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a1958b-22d2-7328-8839-4824730e6790"},{"id":"chg_01a193fd-1b15-7656-91b5-64eaef4de263","kind":"check.verdict","summary":"Authorization (partial → pass)","materiality":"security","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a193fd-1b15-7656-91b5-64eaef4de263"},{"id":"chg_01a193fd-1b16-7316-be0c-e44d5600e1e0","kind":"check.verdict","summary":"MCP protocol (fail → pass)","materiality":"functional","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a193fd-1b16-7316-be0c-e44d5600e1e0"},{"id":"chg_01a193fd-1b16-7810-982e-757035cff12b","kind":"prompt.added","summary":"New prompt “find_non_compliant_records”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a193fd-1b16-7810-982e-757035cff12b"},{"id":"chg_01a193fd-1b16-7caf-b8d6-3a22ada83348","kind":"prompt.added","summary":"New prompt “follow_a_capa_s_history_and_linked_records”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a193fd-1b16-7caf-b8d6-3a22ada83348"},{"id":"chg_01a193fd-1b17-72e4-8577-c3bb7dd43497","kind":"prompt.added","summary":"New prompt “look_up_suppliers_items_and_forms”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a193fd-1b17-72e4-8577-c3bb7dd43497"},{"id":"chg_01a193fd-1b17-76de-827a-1a8d840ba9f7","kind":"prompt.added","summary":"New prompt “review_open_capas_and_their_tasks”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a193fd-1b17-76de-827a-1a8d840ba9f7"},{"id":"chg_01a193fd-1b17-7b7e-a175-66d7eafd32a5","kind":"prompt.added","summary":"New prompt “size_a_period_s_record_activity”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a193fd-1b17-7b7e-a175-66d7eafd32a5"},{"id":"chg_01a193fd-1b17-7f3d-8187-b83ab9f57717","kind":"prompt.added","summary":"New prompt “trace_what_operators_entered_for_a_lot”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a193fd-1b17-7f3d-8187-b83ab9f57717"},{"id":"chg_01a193fd-1b18-741b-9b76-f2b378463392","kind":"server.version_changed","summary":"Server version (1.9.0 → 1.11.0)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a193fd-1b18-741b-9b76-f2b378463392"},{"id":"chg_01a193fd-1b18-7947-bb8a-e7b7f1eba31b","kind":"protocol.version_changed","summary":"MCP protocol version (2025-06-18 → 2025-11-25)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a193fd-1b18-7947-bb8a-e7b7f1eba31b"},{"id":"chg_01a193fd-1b18-7dba-9d20-73f7fe500eea","kind":"score.total_changed","summary":"Trust score (64 → 67)","materiality":"functional","direction":"improvement","scoreDelta":3,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain#chg-chg_01a193fd-1b18-7dba-9d20-73f7fe500eea"}],"truncated":true,"feedUrl":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain/changelog.json"},"links":{"html":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain","markdown":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain.md","changelogJson":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain/changelog.json","changelogRss":"https://verifymcp.io/servers/io-usefulapi-safetychain/safetychain.xml","external":[{"label":"Remote endpoint","href":"https://safetychain.usefulapi.io/mcp"},{"label":"Repository","href":"https://github.com/m190/usefulapi-mcp"},{"label":"Website","href":"https://usefulapi.io/safetychain/"}]}}