
Machine-Readable Company Profiles: find, search and read any company's Trust Profile, fact by fact.
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Read what one company on the Trooth Network has declared about AI and customer data (whether it trains models on customer data, whether AI is in the product, which approaches), named by its domain or its Trooth slug, matched exactly. Each row is the company's own declaration and is labeled so, with whether Trooth observed a supporting policy clause: not observed means Trooth has not read one, never that the company does not train on customer data. Read only.
Company domain (e.g. acme.com) or Trooth slug
Read what one company on the Trooth Network has declared about AI and customer data (whether it trains models on customer data, whether AI is in the product, which approaches), named by its domain or its Trooth slug, matched exactly. Each row is the company's own declaration and is labeled so, with whether Trooth observed a supporting policy clause: not observed means Trooth has not read one, never that the company does not train on customer data. Read only.
| Argument | Type | Description |
|---|---|---|
| company* | string | Company domain (e.g. acme.com) or Trooth slug |
{
"type": "object",
"required": [
"company"
],
"properties": {
"company": {
"type": "string",
"maxLength": 2048,
"description": "Company domain (e.g. acme.com) or Trooth slug"
}
}
}Answer a question about Trooth itself (what the Trooth Network is, what one company record carries, pricing, how witnessing works) from Trooth's fixed, curated knowledge base; takes one question of at most 500 characters. Makes no outside request. A question the knowledge base does not cover returns out_of_scope; for a company's record use trooth_public_trust_profile.
| Argument | Type | Description |
|---|---|---|
| question* | string | A question about Trooth |
{
"type": "object",
"required": [
"question"
],
"properties": {
"question": {
"type": "string",
"maxLength": 500,
"description": "A question about Trooth"
}
}
}List how one company's published record changed: give its domain or slug and, optionally, since (an ISO 8601 date or time). Returns record versions oldest first, each with the fact keys changed, added or removed, and per-fact edits (old value, new value, time, role) when the record carries them, with next_cursor for more. Read only.
| Argument | Type | Description |
|---|---|---|
| since | string | Optional. Only changes at or after this ISO 8601 date or time, e.g. 2026-10-01 |
| cursor | string | Optional. The changes.next_cursor of the previous answer, sent with the same company and since. |
| company* | string | Company domain (e.g. acme.com) or Trooth slug |
{
"type": "object",
"required": [
"company"
],
"properties": {
"since": {
"type": "string",
"maxLength": 40,
"description": "Optional. Only changes at or after this ISO 8601 date or time, e.g. 2026-10-01"
},
"cursor": {
"type": "string",
"maxLength": 512,
"description": "Optional. The changes.next_cursor of the previous answer, sent with the same company and since."
},
"company": {
"type": "string",
"maxLength": 2048,
"description": "Company domain (e.g. acme.com) or Trooth slug"
}
}
}Read one answer from one company's published record: give the company's domain or slug and either a buyer question ID (q_ai_training, q_data_location and ten more, listed in trooth://buyer-questions) or a fact ID such as security.mfa_methods. Returns the sentence, value, provenance word (witnessed, public record, attested or declared), date, freshness window and anchor address, or the negative that applies: no, not_published or not_read. Read only.
| Argument | Type | Description |
|---|---|---|
| fact | string | A fact ID, <section>.<field>, e.g. security.mfa_methods. Give this or question. |
| company* | string | Company domain (e.g. acme.com) or Trooth slug |
| question | string | A buyer question ID, e.g. q_ai_training. Give this or fact. |
{
"type": "object",
"required": [
"company"
],
"properties": {
"fact": {
"type": "string",
"maxLength": 200,
"description": "A fact ID, <section>.<field>, e.g. security.mfa_methods. Give this or question."
},
"company": {
"type": "string",
"maxLength": 2048,
"description": "Company domain (e.g. acme.com) or Trooth slug"
},
"question": {
"type": "string",
"maxLength": 40,
"description": "A buyer question ID, e.g. q_ai_training. Give this or fact."
}
}
}List the companies published on the Trooth Network by what they published: industry, data region, witnessed or not, and claimed (the company published its own profile) or unclaimed. Returns 20 entries per page in alphabetical order of record identifier with next_cursor, from the first 100 matches the directory returns; nothing is weighed or put in an order of merit. Read only.
| Argument | Type | Description |
|---|---|---|
| cursor | string | Optional. The page.next_cursor of the previous answer, sent with the same filters. |
| claimed | boolean | Optional. true for companies that published their own profile, false for listed domains with none |
| industry | string | Optional. Only companies in this industry, e.g. Fintech |
| witnessed | boolean | Optional. true for companies Trooth witnessed, false for those it has not |
| data_region | string | Optional. Only companies that publish this data residency region, e.g. EU |
{
"type": "object",
"properties": {
"cursor": {
"type": "string",
"maxLength": 512,
"description": "Optional. The page.next_cursor of the previous answer, sent with the same filters."
},
"claimed": {
"type": "boolean",
"description": "Optional. true for companies that published their own profile, false for listed domains with none"
},
"industry": {
"type": "string",
"maxLength": 100,
"description": "Optional. Only companies in this industry, e.g. Fintech"
},
"witnessed": {
"type": "boolean",
"description": "Optional. true for companies Trooth witnessed, false for those it has not"
},
"data_region": {
"type": "string",
"maxLength": 100,
"description": "Optional. Only companies that publish this data residency region, e.g. EU"
}
}
}Needs an OAuth access token for this server, for a person who has signed in to trooth.co (no scope is required; the public tools here need no token, and an agent key is not accepted), and takes no arguments: the workspace comes from the token's subject and never from an argument. Reads the company record of the Trooth workspace the signed-in person belongs to and returns its name, its slug and the address of its public page. Read only.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Fetch https://<domain>/ and /.well-known/security.txt once, when called, from Trooth's server and report whether HTTPS answered, which of five response headers (HSTS, CSP, nosniff, frame protection, referrer policy) are present, and whether security.txt is published, absent or unread. IP literals and names resolving to private, loopback or link-local addresses are refused; redirects are reported, not followed; each request stops after 4 seconds. Observations, not witnessed evidence, not a grade.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Domain to read, e.g. example.com |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"maxLength": 2048,
"description": "Domain to read, e.g. example.com"
}
}
}Needs the workspace's agent key (permission profile:read). Takes no arguments. Lists the steps left before the workspace's Trust Profile can be published, each marked for the agent or for a person, with state done, todo or unknown and how to do it. A person's step carries action_url: give that address to the person in one sentence and carry on with your own steps. Read only.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Needs the workspace's agent key (header Authorization: Bearer tra_... on this MCP connection; permission profile:read). Takes no arguments. Returns the workspace's own Trust Profile DRAFT as saved now, its revision (send it as if_match to trooth_profile_update), whether it is published, and its public address. With no key: status unauthenticated and the fix. Read only.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Puts the workspace's saved Trust Profile draft on its public page, which anyone can read. Needs the agent key with profile:publish. Takes no arguments. Success: status published with public_url. A first publish needs a person to prove the company's domain: the answer is then code human_action_required with an action_url to give that person; the draft stays saved. Every other refusal carries trooth.co's code and fix.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Changes fields of the workspace's own Trust Profile DRAFT; the public page changes only on trooth_profile_publish. Needs the agent key with profile:write. Each change names one field by JSON Pointer (/tagline, /founders/-) with a value and its source { url, quote } from the company's own page, or state not_published with a reason. Returns each change as applied or rejected (with code and fix) and the new revision.
| Argument | Type | Description |
|---|---|---|
| changes* | array | The changes, applied in order; a rejected change leaves the draft as it was and the ones after it still apply. Fields and their types: https://trooth.co/api/v1/profile/schema. Fields a person keeps (the page address, the theme, review marks) are rejected with code human_only. |
| dry_run | boolean | Optional. true checks every change and returns what would be kept, and saves nothing. |
| if_match | string | Optional. The revision you read with trooth_profile_get. When someone changed the draft since, nothing is saved and the answer is code revision_changed with the new revision. |
| idempotency_key | string | Optional. A key of your choosing for this exact set of changes. Retrying with the same key and changes returns the first answer with no second write. When omitted, one is made and returned as idempotency_key. |
{
"type": "object",
"required": [
"changes"
],
"properties": {
"changes": {
"type": "array",
"items": {
"type": "object",
"required": [
"path"
],
"properties": {
"op": {
"enum": [
"set",
"remove",
"append"
],
"type": "string",
"description": "Optional. set (the default), remove, or append to a list."
},
"path": {
"type": "string",
"maxLength": 300,
"description": "The field, as an RFC 6901 JSON Pointer: /tagline, /security/contact, /founders/0/name, or /founders/- to add to the end of a list."
},
"state": {
"enum": [
"not_published",
"not_applicable"
],
"type": "string",
"description": "Instead of a value: the company does not publish this (not_published) or it does not apply (not_applicable). Clears the field. Needs a reason."
},
"value": {
"description": "The new value, of the field's type. Required unless state is given or op is remove."
},
"reason": {
"type": "string",
"maxLength": 500,
"description": "With state: one sentence on what you checked, for example: The security page does not mention penetration testing."
},
"source": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2000,
"description": "The https address of the company's own page the value was read from."
},
"quote": {
"type": "string",
"maxLength": 2000,
"description": "The words on that page the value comes from."
},
"retrieved_at": {
"type": "string",
"maxLength": 40,
"description": "When you read the page (RFC 3339), optional."
}
},
"description": "Where the value was read. Required for every non-empty value: a change without an https source is rejected with code source_required."
}
},
"additionalProperties": false
},
"maxItems": 200,
"minItems": 1,
"description": "The changes, applied in order; a rejected change leaves the draft as it was and the ones after it still apply. Fields and their types: https://trooth.co/api/v1/profile/schema. Fields a person keeps (the page address, the theme, review marks) are rejected with code human_only."
},
"dry_run": {
"type": "boolean",
"description": "Optional. true checks every change and returns what would be kept, and saves nothing."
},
"if_match": {
"type": "string",
"maxLength": 100,
"description": "Optional. The revision you read with trooth_profile_get. When someone changed the draft since, nothing is saved and the answer is code revision_changed with the new revision."
},
"idempotency_key": {
"type": "string",
"maxLength": 255,
"description": "Optional. A key of your choosing for this exact set of changes. Retrying with the same key and changes returns the first answer with no second write. When omitted, one is made and returned as idempotency_key."
}
},
"additionalProperties": false
}Read one company's published record on the Trooth Network, given its domain or Trooth slug, matched exactly, never by a similar name; a name several companies share returns their candidates, not a pick. Returns a status and a provenance label with the complete Trust Profile (detail full, the default) or a short answer (detail summary, the better first call). A record is keyed by its domain and does not by itself say which legal entity, subsidiary or product the domain belongs to. Read only.
| Argument | Type | Description |
|---|---|---|
| detail | string | full (default): the complete profile, section by section. summary: the short answer, the contract summary members and where the record is; ask for it first. |
| company* | string | Company domain (e.g. acme.com) or Trooth slug; a URL is reduced to its host |
| sections | string | Optional. Comma-separated section names to return, from: overview, identity, history, funding, product, pricing, stack, security, privacy, ai, hosting, infrastructure, procurement, relationships, proof, people, documents, evidence, cards, faq. Omit for every section. |
{
"type": "object",
"required": [
"company"
],
"properties": {
"detail": {
"enum": [
"full",
"summary"
],
"type": "string",
"maxLength": 7,
"description": "full (default): the complete profile, section by section. summary: the short answer, the contract summary members and where the record is; ask for it first."
},
"company": {
"type": "string",
"maxLength": 2048,
"description": "Company domain (e.g. acme.com) or Trooth slug; a URL is reduced to its host"
},
"sections": {
"type": "string",
"maxLength": 400,
"description": "Optional. Comma-separated section names to return, from: overview, identity, history, funding, product, pricing, stack, security, privacy, ai, hosting, infrastructure, procurement, relationships, proof, people, documents, evidence, cards, faq. Omit for every section."
}
}
}Find the published Trooth Network record for a company given a domain, web address, Trooth slug or name; a company-register identifier, Crunchbase address or Wikidata ID is accepted and answered not_found, because Trooth keeps no lookup by them. Returns the record ID, its canonical https address and why it matched, or every candidate with why each matched (status ambiguous, none chosen), or not_found. Read only.
| Argument | Type | Description |
|---|---|---|
| kind | string | Optional. What the identifier is; read from its form when omitted. A register identifier is read as a name unless kind says otherwise. |
| identifier* | string | A domain, web address, Trooth slug, legal or trading name, company-register identifier, Crunchbase address or Wikidata ID |
{
"type": "object",
"required": [
"identifier"
],
"properties": {
"kind": {
"enum": [
"domain",
"url",
"slug",
"legal_name",
"registry_identifier",
"crunchbase_url",
"wikidata_id"
],
"type": "string",
"maxLength": 20,
"description": "Optional. What the identifier is; read from its form when omitted. A register identifier is read as a name unless kind says otherwise."
},
"identifier": {
"type": "string",
"maxLength": 2048,
"description": "A domain, web address, Trooth slug, legal or trading name, company-register identifier, Crunchbase address or Wikidata ID"
}
}
}Search the companies published on the Trooth Network by name, domain, tagline or category, optionally within one industry. Returns up to 10 entries per page in slug order with next_cursor for the next page (the first 100 matches can be paged), each with its name and tagline in the company's own words, whether Trooth witnessed it, and the identifier that reads its record with trooth_public_trust_profile. Read only.
| Argument | Type | Description |
|---|---|---|
| query* | string | Words to match: a company name, a domain, a category such as payroll or observability |
| cursor | string | Optional. The page.next_cursor of the previous answer, sent with the same query and industry. |
| industry | string | Optional. Only companies in this industry, e.g. Fintech |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 200,
"description": "Words to match: a company name, a domain, a category such as payroll or observability"
},
"cursor": {
"type": "string",
"maxLength": 512,
"description": "Optional. The page.next_cursor of the previous answer, sent with the same query and industry."
},
"industry": {
"type": "string",
"maxLength": 100,
"description": "Optional. Only companies in this industry, e.g. Fintech"
}
}
}Check the two signatures on a Trust Ledger Token (tlt2. or tlt. form, or its JTI) against Trooth's own token ledger. A Trust Ledger Token is a signed token a company issues through Trooth about its own declared claims: the company signs the claims and Trooth signs the event of issuing it. Returns valid, invalid (a signature does not check out), expired or revoked, or unclaimed when no token matches; Trooth's signature covers the signing event, not the claim bytes and not the truth of the claims.
| Argument | Type | Description |
|---|---|---|
| token* | string | A Trust Ledger Token (tlt2. or tlt. form) or its JTI |
{
"type": "object",
"required": [
"token"
],
"properties": {
"token": {
"type": "string",
"maxLength": 16384,
"description": "A Trust Ledger Token (tlt2. or tlt. form) or its JTI"
}
}
}