Safefood 360 MCP by usefulapi
io.usefulapi/safefood-360usefulapi.iostreamable-httpv1.0.0Scanned
Read Safefood 360 documents, complaints, suppliers, materials; create complaints, update documents.
17 tools: 2 can delete or cancel things, 1 change things and 14 only read.
- Reads private data · 8
- Reads text others write · 17
- Can send data out · 1
- No findings
Anlyon alternative
3 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
17 tools
Deletes or cancels 2Claude Code: deny
safefood360_update_customerWRITE: change the name, phone, mobile and/or notes of a customer in Safefood 360 (JSON patch of those fields; others stay as they are).Reads text others writeNo findings
Why it is in this group
- The name "safefood360_update_customer" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it WRITE: change the name, phone, mobile and/or notes of a customer in Safefood 360 (JSON patch of those fields; others stay as they are). notes REPLACES the existing notes. PATCH /customers/sites/{siteId}/v1/customers/{identifier}.
Annotations the server declares
- title: Update customer
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
safefood360_update_documentWRITE: change the title, description and/or folder of a controlled document in Safefood 360 (JSON patch; fields you leave out stay as they are).Reads text others writeNo findings
Why it is in this group
- The name "safefood360_update_document" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it WRITE: change the title, description and/or folder of a controlled document in Safefood 360 (JSON patch; fields you leave out stay as they are). It does not publish a new version or change the review workflow. Returns the updated document. PATCH /documents/sites/{siteId}/v1/documents/{identifier}.
Annotations the server declares
- title: Update document
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
Changes things 1Claude Code: ask
safefood360_create_complaintWRITE: record a NEW complaint in Safefood 360 (it may trigger the site's complaint workflow and notifications).Reads text others writeCan send data outNo findings
Why it is in this group
- The name "safefood360_create_complaint" says "create": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- outboundThe input takes a destination (input.contact_person.phone): what the tool writes goes there.
Description, as the server wrote it WRITE: record a NEW complaint in Safefood 360 (it may trigger the site's complaint workflow and notifications). Not idempotent: calling it twice creates two complaints. Safefood 360 validates the fields (ids such as source, company and recorded_by are GUIDs from your site's lists) and rejects a request that lacks required ones. POST /complaints/sites/{siteId}/v1/complaints/.
Annotations the server declares
- title: Create complaint
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
Only reads 14Show 14 read-only tools
safefood360_get_batching_recordOne batching (traceability) record by its id (GUID).Reads text others writeNo findings
Why it is in this group
- The name "safefood360_get_batching_record" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it One batching (traceability) record by its id (GUID). GET /batching/sites/{siteId}/v1/batching/records/{recordId}.
Annotations the server declares
- title: Get batching record
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
safefood360_get_complaintOne complaint by its id (GUID).Reads text others writeNo findings
Why it is in this group
- The name "safefood360_get_complaint" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it One complaint by its id (GUID). GET /complaints/sites/{siteId}/v1/complaints/{id}.
Annotations the server declares
- title: Get complaint
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
safefood360_get_customerOne customer by its identifier (name, addresses, phone, notes).Reads private dataReads text others writeNo findings
Why it is in this group
- The name "safefood360_get_customer" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "note": it reads notes.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it One customer by its identifier (name, addresses, phone, notes). The vendor offers no customer list. GET /customers/sites/{siteId}/v1/customers/{identifier}.
Annotations the server declares
- title: Get customer
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
safefood360_get_documentOne controlled document by its identifier: title, description, version, folder, responsible person and workflow.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "safefood360_get_document" says "get": a word for reading.
What it can reach
- private-dataThe name "safefood360_get_document" says "get" and "document": it reads documents.
- private-dataThe description's first sentence says "document": it reads documents.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it One controlled document by its identifier: title, description, version, folder, responsible person and workflow. GET /documents/sites/{siteId}/v1/documents/{identifier}.
Annotations the server declares
- title: Get document
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
safefood360_get_document_reviewOne document review by its review number.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "safefood360_get_document_review" says "get": a word for reading.
What it can reach
- private-dataThe name "safefood360_get_document_review" says "get" and "document": it reads documents.
- private-dataThe description's first sentence says "document": it reads documents.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- untrusted-inputThe name "safefood360_get_document_review" says "get" and "review": it reads comments, which other people can write.
- untrusted-inputThe description's first sentence says "review": it reads comments, which other people can write.
Description, as the server wrote it One document review by its review number. GET /documents/sites/{siteId}/v1/documentreviews/{no}.
Annotations the server declares
- title: Get document review
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
safefood360_get_employeeOne employee record by its identifier (training/HR master data of the site).Reads text others writeNo findings
Why it is in this group
- The name "safefood360_get_employee" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it One employee record by its identifier (training/HR master data of the site). Contains personal data: use it only for the question asked. The vendor offers no employee list. GET /employees/sites/{siteId}/v1/employees/{identifier}.
Annotations the server declares
- title: Get employee
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
safefood360_get_final_productOne final (finished) product by its identifier: name, folder, categories, barcode, specifications and the materials it is made of.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "safefood360_get_final_product" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "folder": it reads files.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it One final (finished) product by its identifier: name, folder, categories, barcode, specifications and the materials it is made of. The vendor offers no final-product list. GET /finalproducts/sites/{siteId}/v1/finalproducts/{identifier}.
Annotations the server declares
- title: Get final product
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
safefood360_get_materialOne material by its external id.Reads text others writeNo findings
Why it is in this group
- The name "safefood360_get_material" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it One material by its external id. GET /v1/materials/{externalId}?siteId=.
Annotations the server declares
- title: Get material
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
safefood360_get_supplierOne supplier by its external id.Reads text others writeNo findings
Why it is in this group
- The name "safefood360_get_supplier" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it One supplier by its external id. GET /v1/suppliers/{externalId}?siteId=.
Annotations the server declares
- title: Get supplier
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
safefood360_list_complaintsList customer complaints (number, name, risk, date, company, source, contact person, product/material, description, created/modified).Reads private dataReads text others writeNo findings
Why it is in this group
- The name "safefood360_list_complaints" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "list" and "contact": it reads contacts.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it List customer complaints (number, name, risk, date, company, source, contact person, product/material, description, created/modified). Supports OData $filter, $orderby, $top, $skip and $count. GET /complaints/sites/{siteId}/v1/complaints.
Annotations the server declares
- title: List complaints
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
safefood360_list_document_reviewsList document reviews (the periodic review records of controlled documents).Reads private dataReads text others writeNo findings
Why it is in this group
- The name "safefood360_list_document_reviews" says "list": a word for reading.
What it can reach
- private-dataThe name "safefood360_list_document_reviews" says "list" and "document": it reads documents.
- private-dataThe description's first sentence says "list" and "document": it reads documents.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- untrusted-inputThe name "safefood360_list_document_reviews" says "list" and "review": it reads comments, which other people can write.
- untrusted-inputThe description's first sentence says "list" and "review": it reads comments, which other people can write.
Description, as the server wrote it List document reviews (the periodic review records of controlled documents). Supports OData $filter, $orderby, $top, $skip and $count; use it to find reviews that are due or overdue. GET /documents/sites/{siteId}/v1/documentreviews/.
Annotations the server declares
- title: List document reviews
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
safefood360_list_documentsList controlled documents of the Safefood 360 site (title, description, version, folder, responsible person, review/approval workflow, created/modified).Reads private dataReads text others writeNo findings
Why it is in this group
- The name "safefood360_list_documents" says "list": a word for reading.
What it can reach
- private-dataThe name "safefood360_list_documents" says "list" and "document": it reads documents.
- private-dataThe description's first sentence says "list" and "document": it reads documents.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- untrusted-inputThe description's first sentence says "list" and "review": it reads comments, which other people can write.
Description, as the server wrote it List controlled documents of the Safefood 360 site (title, description, version, folder, responsible person, review/approval workflow, created/modified). Supports OData $filter, $orderby, $top, $skip and $count. GET /documents/sites/{siteId}/v1/documents/.
Annotations the server declares
- title: List documents
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
safefood360_list_materialsList materials/ingredients (name, our code, supplier code, description, category, countries of origin, risk, archived flag).Reads text others writeNo findings
Why it is in this group
- The name "safefood360_list_materials" says "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it List materials/ingredients (name, our code, supplier code, description, category, countries of origin, risk, archived flag). Paged with start_index and limit; the reply carries recordCount and next_start_index. GET /v1/materials/?siteId=.
Annotations the server declares
- title: List materials
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
safefood360_list_suppliersList suppliers (name, code, addresses, contacts, approval status, risk, establishment numbers).Reads private dataReads text others writeNo findings
Why it is in this group
- The name "safefood360_list_suppliers" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "list" and "contact": it reads contacts.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it List suppliers (name, code, addresses, contacts, approval status, risk, establishment numbers). Paged with start_index and limit; the reply carries recordCount and next_start_index. GET /v1/suppliers/?siteId=.
Annotations the server declares
- title: List suppliers
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
136 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 1 outbound tool breaks every one.
- Reads private data8
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write17
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- safefood360_create_complaint
- safefood360_get_batching_record
- safefood360_get_complaint
- safefood360_get_customer
- safefood360_get_document
- safefood360_get_document_review
- safefood360_get_employee
- safefood360_get_final_product
- safefood360_get_material
- safefood360_get_supplier
- safefood360_list_complaints
- safefood360_list_document_reviews
- and 5 more
- Can send data out1
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
{
"permissions": {
"deny": [
"mcp__safefood-360__safefood360_create_complaint"
]
}
}Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
No check matched anything in these tool definitions. That is not a safety guarantee.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http safefood-360 https://safefood-360.usefulapi.io/mcpclaude mcp add --transport http safefood-360 https://safefood-360.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__safefood-360__safefood360_list_documents",
"mcp__safefood-360__safefood360_get_document",
"mcp__safefood-360__safefood360_list_document_reviews",
"mcp__safefood-360__safefood360_get_document_review",
"mcp__safefood-360__safefood360_list_complaints",
"mcp__safefood-360__safefood360_get_complaint",
"mcp__safefood-360__safefood360_list_suppliers",
"mcp__safefood-360__safefood360_get_supplier",
"mcp__safefood-360__safefood360_list_materials",
"mcp__safefood-360__safefood360_get_material",
"mcp__safefood-360__safefood360_get_customer",
"mcp__safefood-360__safefood360_get_employee",
"mcp__safefood-360__safefood360_get_final_product",
"mcp__safefood-360__safefood360_get_batching_record"
],
"ask": [
"mcp__safefood-360__safefood360_create_complaint"
],
"deny": [
"mcp__safefood-360__safefood360_update_document",
"mcp__safefood-360__safefood360_update_customer"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as safefood-360. Review it before you use it.
Capability tags behind 17 rules
- mcp__safefood-360__safefood360_list_documents private-data, untrusted-input
- mcp__safefood-360__safefood360_get_document private-data, untrusted-input
- mcp__safefood-360__safefood360_list_document_reviews private-data, untrusted-input
- mcp__safefood-360__safefood360_get_document_review private-data, untrusted-input
- mcp__safefood-360__safefood360_list_complaints private-data, untrusted-input
- mcp__safefood-360__safefood360_get_complaint untrusted-input
- mcp__safefood-360__safefood360_list_suppliers private-data, untrusted-input
- mcp__safefood-360__safefood360_get_supplier untrusted-input
- mcp__safefood-360__safefood360_list_materials untrusted-input
- mcp__safefood-360__safefood360_get_material untrusted-input
- mcp__safefood-360__safefood360_get_customer private-data, untrusted-input
- mcp__safefood-360__safefood360_get_employee untrusted-input
- mcp__safefood-360__safefood360_get_final_product private-data, untrusted-input
- mcp__safefood-360__safefood360_get_batching_record untrusted-input
- mcp__safefood-360__safefood360_update_document untrusted-input
- mcp__safefood-360__safefood360_update_customer untrusted-input
- mcp__safefood-360__safefood360_create_complaint untrusted-input, outbound
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/io.usefulapi/safefood-360/verify?hash=a7c7a469e99cdff0b5ae5ebad96f23b7577a75799e6affcd9434f65a3d253e71" | jq -e '.changed == false'Pinned hash a7c7a469e99c, from Oct 24, 2026, 16:21 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/io.usefulapi/safefood-360/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/io.usefulapi/safefood-360)Source: MCP Registry · repository. Synced Oct 24, 2026, 17:17 UTC.