Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "get_services"
⟨257 unchanged words⟩ states one.","type":"string"},"duration_from":{"description":"The event the duration counts from, where the service states one.","type":"string"},"id":{"description":"Stable identifier of the ⟨136 unchanged words⟩
Changed the definition of "get_agent_readiness", "get_contact", "get_principles" and 2 more
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"domain":{"description":"The domain the reading is about.","type":"string"},"measured_at":{"description" ⟨5 unchanged words⟩ ,"type":"string"},"note":{"description":"A caveat that the scores are a point-in-time reading by an independent scanner and that the scan url opens the scanner's start page.","type":"string"},"scans":{"description":"Readings from independent scanners, one per entry.","items":{"additionalProperties":false,"properties":{"categories":{"additionalProperties":{"description":"The category score as text, out of 100.","type":"string"},"description":"Sub-scores by category. Each key is a category name: discoverability, content, bot_access_control, api_auth_mcp_a2a_discovery or commerce.","propertyNames":{"type":"string"},"type":"object"},"note":{"description":"Who runs the scanner and a reminder that the reading is the scanner's and can be re-run by anyone.","type":"string"},"provider":{"description":"The domain of the scanner that produced the reading.","type":"string"},"result":{"description":"The scanner's overall result as text, giving the score out of 100 and the level reached.","type":"string"},"url":{"description":"The scanner's start page, where a new check can be run. It does not show the recorded reading.","type":"string"}},"required":[" ⟨16 unchanged words⟩
Changed the definition of "get_security_evidence"
⟨10 unchanged words⟩ domain (Hardenize, Internet.nl site and mail), each withtheits scan date. Use this when a user asks ⟨43 unchanged words⟩
⟨22 unchanged words⟩ items":{"additionalProperties":false,"properties":{"measured_at":{"description":"Date of this reading, YYYY-MM-DD, when it differs from the top-level date.","type":"string"},"note":{"type":"string"},"provider" ⟨28 unchanged words⟩
Changed the definition of "get_agent_readiness"
⟨12 unchanged words⟩ category sub-scores, with the measurement date andverificationalinks.link to the scanner's start page, where a new check can be run (the link does not open the recorded reading). Use this when a user asks how turva.dev ⟨44 unchanged words⟩
Changed the definition of "get_services"
⟨51 unchanged words⟩ carry a fixed price and are sold onlytogetherwith the diagnosis theyfollow.follow, bought with it, with its report, or after the report and before implementation starts. Use this when a user asks what turva.dev ⟨45 unchanged words⟩
Changed the definition of "get_agent_readiness", "get_contact", "get_principles" and 2 more
{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{},"type":"object"}
before
—after
{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"domain":{"type":"string"},"measured_at":{"description":"Date of the reading, YYYY-MM-DD.","type":"string"},"note":{"type":"string"},"scans":{"items":{"additionalProperties":false,"properties":{"categories":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"note":{"type":"string"},"provider":{"type":"string"},"result":{"type":"string"},"url":{"type":"string"}},"required":["provider","result","note","categories","url"],"type":"object"},"type":"array"}},"required":["domain","measured_at","note","scans"],"type":"object"}Certificate changed, valid to 2026-12-18
Certificate recorded, valid to 2026-10-19
Authorization not required
First tool surface recorded: 5 tools (server version 1.4.1)
Showing the latest 10 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"business_id":{"description":"The Finnish business ID of the business.","type":"string"},"channel_note":{"description":"Which channel suits which kind of message, and that there are no calls.","type":"string"},"correspondence_languages":{"description":"ISO 639-1 codes of the languages the correspondence is held in.","items":{"description":"An ISO 639-1 language code.","type":"string"},"type":"array"},"email":{"description":"The email address for starting an engagement.","type":"string"},"engagement":{"description":"How an engagement is communicated, async_only for written exchange with no calls.","type":"string"},"first_reply":{"description":"How soon the first reply comes and by which channels, and that LinkedIn has no set reply time.","type":"string"},"how_to_start":{"description":"The steps to start an engagement and the access an audit needs, one per entry.","items":{"description":"One step as a sentence.","type":"string"},"type":"array"},"linkedin":{"description":"The URL of the operator's LinkedIn profile.","type":"string"},"location":{"description":"The city and country where the business is based.","type":"string"},"operator":{"additionalProperties":false,"description":"Who runs turva.dev and the registered business behind it.","properties":{"background":{"description":"The professional background of the person who runs the business.","type":"string"},"business_id":{"description":"The Finnish business ID of the business.","type":"string"},"company_page":{"description" ⟨8 unchanged words⟩ ,"type":"string"},"legal_form":{"description":"The legal form of the business.","type":"string"},"location":{"description":"Where the business is based: city, region and country.","type":"string"},"name":{"description":"The trading name of the business.","type":"string"},"run_by":{"description":"The person who runs the business.","type":"string"},"team":{"description":"Who works at the business and how clients work with them.","type":"string"},"vat_id":{"description":"The VAT identification number of the business.","type":"string"}},"required":["name ⟨8 unchanged words⟩ ],"type":"object"},"signal":{"description":"A link that opens a Signal chat with the operator.","type":"string"}},"required":[" ⟨13 unchanged words⟩
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"model":{"description":"The service model the principles belong to, agent_readiness_audit for the agent-readiness audit.","type":"string"},"rules":{"description":"The principles an engagement follows, one per entry.","items":{"additionalProperties":false,"properties":{"id":{"description":"Stable identifier of the principle.","type":"string"},"rationale":{"description":"What the principle means in practice and why it holds.","type":"string"},"title":{"description":"The principle in a short phrase.","type":"string"}},"required":[" ⟨12 unchanged words⟩
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"domain":{"description":"The domain the scans are about.","type":"string"},"measured_at":{"description" ⟨5 unchanged words⟩ ,"type":"string"},"note":{"description":"Why turva.dev publishes the scan results of its own domain.","type":"string"},"scans":{"description":"Web-security scan results, one per provider and test.","items":{"additionalProperties":false,"properties":{"measured_at":{"description":"Date of this reading, YYYY-MM-DD,whenonitadiffersreadingfromthat carries its own date. It can equal the top-level date.","type":"string"},"note":{"description":"What passed in full and where the points were lost. Absent when the provider adds no note.","type":"string"},"provider":{"description":"The name of the scan provider.","type":"string"},"result":{"description":"The overall result as text, for a provider that reports passed categories instead of a number. Absent when a numeric score is given.","type":"string"},"scale":{"description":"The range of the score, written as low-high. Absent when there is no numeric score.","type":"string"},"score":{"description":"The numeric score, on the range given in scale. Absent when the provider reports a text result.","type":"number"},"url":{"description":"The provider's public report page for the domain.","type":"string"}},"required":[" ⟨13 unchanged words⟩
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"bundled_implementation":{"description":"Implementation add-ons that are sold only with another service.","items":{"additionalProperties":false,"properties":{"id":{"description":"Stable identifier of the add-on.","type":"string"},"name":{"description":"The name of the add-on.","type":"string"},"price":{"description":"Price in EUR, VAT not included.","type":"number"},"requires":{"description" ⟨10 unchanged words⟩ ,"type":"string"},"sold_separately":{"description":"Whether the add-on can be bought without its service. False means it cannot.","type":"boolean"},"summary":{"description":"What the add-on covers and when it is bought.","type":"string"},"unit":{"description":"What the price covers, such as fixed.","type":"string"}},"required":["id ⟨8 unchanged words⟩ ,"type":"array"},"currency":{"description":"ISO 4217 code of every price, EUR.","type":"string"},"engagement":{"additionalProperties":false,"description":"How an engagement is run.","properties":{"communication":{"description":"How an engagement is communicated, async_only for written exchange with no calls.","type":"string"},"notes":{"description":"Terms of an engagement, one per entry, covering access, scope, dates and completion.","items":{"description":"One term of an engagement as a sentence.","type":"string"},"type":"array"} ⟨3 unchanged words⟩ ,"type":"object"},"pricing_model":{"description":"The pricing model. fixed_list_prices means fixed list prices, apart from the services priced on request.","type":"string"},"pricing_note":{"description":"The VAT treatment by customer type, the services quoted per engagement and the rule for the add-ons.","type":"string"},"services":{"description":"The services with their prices.","items":{"additionalProperties":false,"properties":{"deliverable":{"description":"What the customer receives and when.","type":"string"},"duration":{"description":"How long delivery takes, where the service states one.","type":"string"},"id":{"description":"Stable identifier of the service.","type":"string"},"minimum_commitment":{"description":"The shortest term the service is sold for, where one applies.","type":"string"},"name":{"description":"The name of the service.","type":"string"},"price":{"anyOf" ⟨26 unchanged words⟩ ,"type":"string"},"summary":{"description":"What the service covers and its scope.","type":"string"},"unit":{"description":"What the price covers, such as fixed, month or day. Absent when the price is on request.","type":"string"},"url":{"description" ⟨18 unchanged words⟩ },"type":"array"},"vat_included":{"description":"Whether the prices include VAT. False means every price excludes VAT.","type":"boolean"}},"required":[" ⟨9 unchanged words⟩
Contact andhow tooperatorstartdetails
Returns who runs turva.dev and the official ways to reachturva.dev andit:whatthestartingoperatoranandengagementbusinesstakes:details, the email address, the Signal link, the LinkedIn profile, thebusiness ID and location, thecorrespondence languages, the first-reply time,and the access an audit needs. Use this when a user asks who is behind turva.dev, how to contactturva.devit, how to start an audit,or what access has to be granted. For ⟨29 unchanged words⟩
{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{},"type":"object"}
before
—after
{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"business_id":{"type":"string"},"channel_note":{"type":"string"},"correspondence_languages":{"items":{"type":"string"},"type":"array"},"email":{"type":"string"},"engagement":{"type":"string"},"first_reply":{"type":"string"},"how_to_start":{"items":{"type":"string"},"type":"array"},"linkedin":{"type":"string"},"location":{"type":"string"},"operator":{"additionalProperties":false,"properties":{"background":{"type":"string"},"business_id":{"type":"string"},"company_page":{"description":"The turva.dev page that states the business details.","type":"string"},"legal_form":{"type":"string"},"location":{"type":"string"},"name":{"type":"string"},"run_by":{"type":"string"},"team":{"type":"string"},"vat_id":{"type":"string"}},"required":["name","run_by","legal_form","business_id","vat_id","location","team","background","company_page"],"type":"object"},"signal":{"type":"string"}},"required":["email","signal","linkedin","business_id","location","engagement","correspondence_languages","first_reply","channel_note","how_to_start","operator"],"type":"object"}{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{},"type":"object"}
before
—after
{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"model":{"type":"string"},"rules":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"rationale":{"type":"string"},"title":{"type":"string"}},"required":["id","title","rationale"],"type":"object"},"type":"array"}},"required":["model","rules"],"type":"object"}{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{},"type":"object"}
before
—after
{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"domain":{"type":"string"},"measured_at":{"description":"Date of the scans, YYYY-MM-DD.","type":"string"},"note":{"type":"string"},"scans":{"items":{"additionalProperties":false,"properties":{"note":{"type":"string"},"provider":{"type":"string"},"result":{"type":"string"},"scale":{"type":"string"},"score":{"type":"number"},"url":{"type":"string"}},"required":["provider","url"],"type":"object"},"type":"array"}},"required":["domain","measured_at","scans","note"],"type":"object"}{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{},"type":"object"}
before
—after
{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"bundled_implementation":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"price":{"type":"number"},"requires":{"description":"The id of the service this add-on is sold with.","type":"string"},"sold_separately":{"type":"boolean"},"summary":{"type":"string"},"unit":{"type":"string"}},"required":["id","name","price","unit","requires","sold_separately","summary"],"type":"object"},"type":"array"},"currency":{"type":"string"},"engagement":{"additionalProperties":false,"properties":{"communication":{"type":"string"},"notes":{"items":{"type":"string"},"type":"array"}},"required":["communication","notes"],"type":"object"},"pricing_model":{"type":"string"},"pricing_note":{"type":"string"},"services":{"items":{"additionalProperties":false,"properties":{"deliverable":{"type":"string"},"duration":{"type":"string"},"id":{"type":"string"},"minimum_commitment":{"type":"string"},"name":{"type":"string"},"price":{"anyOf":[{"type":"number"},{"const":"on request","type":"string"}],"description":"EUR, VAT not included, or on request."},"sample_url":{"description":"A published sample of the deliverable, where one exists.","type":"string"},"summary":{"type":"string"},"unit":{"type":"string"},"url":{"description":"The turva.dev page that describes the service.","type":"string"}},"required":["id","name","url","price","summary","deliverable"],"type":"object"},"type":"array"},"vat_included":{"type":"boolean"}},"required":["pricing_model","pricing_note","currency","vat_included","engagement","services","bundled_implementation"],"type":"object"}