Serveur MCP

Trooth

io.github.troothllc/trooth-network
Sécurité Public et accessible MCP 2025-11-25

Ce que fait ce MCP

Reads company trust profiles, checks selected website security signals, and verifies Trooth trust-token signatures.

trooth_ask
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. 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.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['question'], 'properties': {'question': {'type': 'string', 'maxLength': 500, 'description': 'A question about Trooth'}}}
Schéma de sortie
{'type': 'object', 'required': ['status', 'provenance', 'subject', 'summary', 'answered_at', 'source'], 'properties': {'source': {'type': 'object', 'required': ['name', 'version', 'as_of'], 'properties': {'name': {'type': 'string', 'description': 'The source read: the published record contract on trooth.co, the Trooth Network directory, a live read of the domain, the Trust Ledger, the capability registry or the knowledge base.'}, 'as_of': {'type': ['string', 'null'], 'description': "The date the source carries for this answer: last witnessed, last read, the token's issue date, the entry's check date. Null when it carries none."}, 'version': {'type': ['string', 'null'], 'description': "The source's version: the record contract, the registry or corpus version, or null when the source has none."}}, 'description': 'What this answer was read from, which version of it, and the date that source itself carries. as_of is null when the source carries no date, never a guessed one.'}, 'status': {'enum': ['published', 'listed', 'unclaimed', 'private', 'observed', 'valid', 'invalid', 'expired', 'revoked', 'answered', 'out_of_scope', 'bad_input', 'unavailable'], 'type': 'string', 'description': 'Machine-branchable outcome for this lookup.'}, 'subject': {'type': 'string', 'maxLength': 2048, 'description': 'The company, domain or token this answer is about.'}, 'summary': {'type': 'string', 'maxLength': 8000, 'description': 'The same answer as the text content, for display. Bounded; a longer answer is cut and says where the rest is.'}, 'evidence': {'type': 'object', 'properties': {'counts': {'type': ['object', 'null'], 'properties': {'read': {'type': 'integer'}, 'source': {'enum': ['witness_statement', 'result_tally'], 'type': 'string'}, 'not_read': {'type': ['integer', 'null']}, 'in_reading': {'type': ['integer', 'null']}, 'as_expected': {'type': 'integer'}}, 'description': "The reading's counts, from the source named. witness_statement: read, as expected and not read in this reading. result_tally: an older reading's own tally, not a count of checks read."}, 'schema': {'type': 'string'}, 'omitted': {'type': 'array', 'items': {'type': 'string'}, 'description': 'What the summary leaves out. Every item is in full_record.'}, 'full_record': {'type': 'string', 'description': 'The canonical record as JSON, contract 2, with every typed fact, its provenance and its date where known.'}, 'last_witnessed': {'type': ['string', 'null']}, 'profile_signed': {'type': 'boolean', 'description': 'Always false. The profile is not signed.'}, 'facts_published': {'type': ['integer', 'null']}, 'signed_artifact': {'type': ['object', 'null'], 'properties': {'type': {'type': 'string'}, 'covers': {'type': 'string'}, 'key_id': {'type': 'string'}, 'verify': {'type': 'string'}, 'read_at': {'type': ['string', 'null']}}, 'description': 'The one signed object behind this answer, or null when the reading carries none. It is served, byte for byte as signed, in the witnessStatement field of full_record.'}}, 'description': 'Present on a published profile. What this answer is built from, what it leaves out, and where to get the rest. The summary is a summary: the typed facts with their provenance are in the record at full_record.'}, 'citations': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'source', 'checked'], 'properties': {'id': {'type': 'string'}, 'source': {'type': 'string'}, 'checked': {'type': 'string'}}}, 'description': 'trooth_ask only: the entries the answer was taken from, each with where it comes from and the date it was last checked or changed.'}, 'claim_url': {'type': 'string', 'description': 'Present when the subject has no published record (unclaimed or private).'}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name', 'domain', 'select'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'domain': {'type': ['string', 'null']}, 'select': {'type': 'string'}}}, 'description': "trooth_public_trust_profile only, with status bad_input: a name several published companies share. No company was chosen; each entry's select is the exact identifier that reads that one company."}, 'provenance': {'enum': ['witnessed_reading', 'connected_system_reads', 'ledger_token_signatures', 'witnessed_signed', 'signed_scan', 'live_observation', 'honest_absence', 'withheld_by_owner', 'knowledge_base', 'input_error', 'self_declared', 'read_failed'], 'type': 'string', 'description': "Where this answer came from. An honest_absence is missing data, never a judgment about the subject. A read_failed means Trooth could not read its own record at this moment and asserts nothing either way; retry rather than concluding. witnessed_reading: a published profile whose reading Trooth witnessed; the profile is not signed, and the one signed object is the reading's witness statement (see evidence.signed_artifact). connected_system_reads: read from systems the company connected. ledger_token_signatures: the result of checking a Trust Ledger Token's two signatures; the claims inside it stay the company's. witnessed_signed is DEPRECATED since 2026-09-26 and no longer returned; it meant any of the three above."}, 'answered_at': {'type': 'string', 'format': 'date-time', 'description': 'When this server produced this answer (UTC, ISO 8601). It is not the date of the facts: that is source.as_of.'}}, 'description': 'The typed form of every answer a tool completes. A call that fails partway answers isError: true with text only and no structured record.'}
trooth_outside_in_read
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.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'maxLength': 2048, 'description': 'Domain to read, e.g. example.com'}}}
Schéma de sortie
{'type': 'object', 'required': ['status', 'provenance', 'subject', 'summary', 'answered_at', 'source'], 'properties': {'source': {'type': 'object', 'required': ['name', 'version', 'as_of'], 'properties': {'name': {'type': 'string', 'description': 'The source read: the published record contract on trooth.co, the Trooth Network directory, a live read of the domain, the Trust Ledger, the capability registry or the knowledge base.'}, 'as_of': {'type': ['string', 'null'], 'description': "The date the source carries for this answer: last witnessed, last read, the token's issue date, the entry's check date. Null when it carries none."}, 'version': {'type': ['string', 'null'], 'description': "The source's version: the record contract, the registry or corpus version, or null when the source has none."}}, 'description': 'What this answer was read from, which version of it, and the date that source itself carries. as_of is null when the source carries no date, never a guessed one.'}, 'status': {'enum': ['published', 'listed', 'unclaimed', 'private', 'observed', 'valid', 'invalid', 'expired', 'revoked', 'answered', 'out_of_scope', 'bad_input', 'unavailable'], 'type': 'string', 'description': 'Machine-branchable outcome for this lookup.'}, 'subject': {'type': 'string', 'maxLength': 2048, 'description': 'The company, domain or token this answer is about.'}, 'summary': {'type': 'string', 'maxLength': 8000, 'description': 'The same answer as the text content, for display. Bounded; a longer answer is cut and says where the rest is.'}, 'evidence': {'type': 'object', 'properties': {'counts': {'type': ['object', 'null'], 'properties': {'read': {'type': 'integer'}, 'source': {'enum': ['witness_statement', 'result_tally'], 'type': 'string'}, 'not_read': {'type': ['integer', 'null']}, 'in_reading': {'type': ['integer', 'null']}, 'as_expected': {'type': 'integer'}}, 'description': "The reading's counts, from the source named. witness_statement: read, as expected and not read in this reading. result_tally: an older reading's own tally, not a count of checks read."}, 'schema': {'type': 'string'}, 'omitted': {'type': 'array', 'items': {'type': 'string'}, 'description': 'What the summary leaves out. Every item is in full_record.'}, 'full_record': {'type': 'string', 'description': 'The canonical record as JSON, contract 2, with every typed fact, its provenance and its date where known.'}, 'last_witnessed': {'type': ['string', 'null']}, 'profile_signed': {'type': 'boolean', 'description': 'Always false. The profile is not signed.'}, 'facts_published': {'type': ['integer', 'null']}, 'signed_artifact': {'type': ['object', 'null'], 'properties': {'type': {'type': 'string'}, 'covers': {'type': 'string'}, 'key_id': {'type': 'string'}, 'verify': {'type': 'string'}, 'read_at': {'type': ['string', 'null']}}, 'description': 'The one signed object behind this answer, or null when the reading carries none. It is served, byte for byte as signed, in the witnessStatement field of full_record.'}}, 'description': 'Present on a published profile. What this answer is built from, what it leaves out, and where to get the rest. The summary is a summary: the typed facts with their provenance are in the record at full_record.'}, 'citations': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'source', 'checked'], 'properties': {'id': {'type': 'string'}, 'source': {'type': 'string'}, 'checked': {'type': 'string'}}}, 'description': 'trooth_ask only: the entries the answer was taken from, each with where it comes from and the date it was last checked or changed.'}, 'claim_url': {'type': 'string', 'description': 'Present when the subject has no published record (unclaimed or private).'}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name', 'domain', 'select'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'domain': {'type': ['string', 'null']}, 'select': {'type': 'string'}}}, 'description': "trooth_public_trust_profile only, with status bad_input: a name several published companies share. No company was chosen; each entry's select is the exact identifier that reads that one company."}, 'provenance': {'enum': ['witnessed_reading', 'connected_system_reads', 'ledger_token_signatures', 'witnessed_signed', 'signed_scan', 'live_observation', 'honest_absence', 'withheld_by_owner', 'knowledge_base', 'input_error', 'self_declared', 'read_failed'], 'type': 'string', 'description': "Where this answer came from. An honest_absence is missing data, never a judgment about the subject. A read_failed means Trooth could not read its own record at this moment and asserts nothing either way; retry rather than concluding. witnessed_reading: a published profile whose reading Trooth witnessed; the profile is not signed, and the one signed object is the reading's witness statement (see evidence.signed_artifact). connected_system_reads: read from systems the company connected. ledger_token_signatures: the result of checking a Trust Ledger Token's two signatures; the claims inside it stay the company's. witnessed_signed is DEPRECATED since 2026-09-26 and no longer returned; it meant any of the three above."}, 'answered_at': {'type': 'string', 'format': 'date-time', 'description': 'When this server produced this answer (UTC, ISO 8601). It is not the date of the facts: that is source.as_of.'}}, 'description': 'The typed form of every answer a tool completes. A call that fails partway answers isError: true with text only and no structured record.'}
trooth_public_trust_profile
Read one company's published record on the Trooth Network, given its domain or Trooth slug. The identifier is matched exactly (a URL is reduced to its host), never by a similar name; a name several companies share returns their candidates, not a pick. A record is keyed by its domain and does not by itself say which legal entity, subsidiary or product the domain belongs to. Returns a status and a provenance label; the company's own text is labeled as its own words. Read only.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['company'], 'properties': {'company': {'type': 'string', 'maxLength': 2048, 'description': 'Company domain (e.g. acme.com) or Trooth slug'}}}
Schéma de sortie
{'type': 'object', 'required': ['status', 'provenance', 'subject', 'summary', 'answered_at', 'source'], 'properties': {'source': {'type': 'object', 'required': ['name', 'version', 'as_of'], 'properties': {'name': {'type': 'string', 'description': 'The source read: the published record contract on trooth.co, the Trooth Network directory, a live read of the domain, the Trust Ledger, the capability registry or the knowledge base.'}, 'as_of': {'type': ['string', 'null'], 'description': "The date the source carries for this answer: last witnessed, last read, the token's issue date, the entry's check date. Null when it carries none."}, 'version': {'type': ['string', 'null'], 'description': "The source's version: the record contract, the registry or corpus version, or null when the source has none."}}, 'description': 'What this answer was read from, which version of it, and the date that source itself carries. as_of is null when the source carries no date, never a guessed one.'}, 'status': {'enum': ['published', 'listed', 'unclaimed', 'private', 'observed', 'valid', 'invalid', 'expired', 'revoked', 'answered', 'out_of_scope', 'bad_input', 'unavailable'], 'type': 'string', 'description': 'Machine-branchable outcome for this lookup.'}, 'subject': {'type': 'string', 'maxLength': 2048, 'description': 'The company, domain or token this answer is about.'}, 'summary': {'type': 'string', 'maxLength': 8000, 'description': 'The same answer as the text content, for display. Bounded; a longer answer is cut and says where the rest is.'}, 'evidence': {'type': 'object', 'properties': {'counts': {'type': ['object', 'null'], 'properties': {'read': {'type': 'integer'}, 'source': {'enum': ['witness_statement', 'result_tally'], 'type': 'string'}, 'not_read': {'type': ['integer', 'null']}, 'in_reading': {'type': ['integer', 'null']}, 'as_expected': {'type': 'integer'}}, 'description': "The reading's counts, from the source named. witness_statement: read, as expected and not read in this reading. result_tally: an older reading's own tally, not a count of checks read."}, 'schema': {'type': 'string'}, 'omitted': {'type': 'array', 'items': {'type': 'string'}, 'description': 'What the summary leaves out. Every item is in full_record.'}, 'full_record': {'type': 'string', 'description': 'The canonical record as JSON, contract 2, with every typed fact, its provenance and its date where known.'}, 'last_witnessed': {'type': ['string', 'null']}, 'profile_signed': {'type': 'boolean', 'description': 'Always false. The profile is not signed.'}, 'facts_published': {'type': ['integer', 'null']}, 'signed_artifact': {'type': ['object', 'null'], 'properties': {'type': {'type': 'string'}, 'covers': {'type': 'string'}, 'key_id': {'type': 'string'}, 'verify': {'type': 'string'}, 'read_at': {'type': ['string', 'null']}}, 'description': 'The one signed object behind this answer, or null when the reading carries none. It is served, byte for byte as signed, in the witnessStatement field of full_record.'}}, 'description': 'Present on a published profile. What this answer is built from, what it leaves out, and where to get the rest. The summary is a summary: the typed facts with their provenance are in the record at full_record.'}, 'citations': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'source', 'checked'], 'properties': {'id': {'type': 'string'}, 'source': {'type': 'string'}, 'checked': {'type': 'string'}}}, 'description': 'trooth_ask only: the entries the answer was taken from, each with where it comes from and the date it was last checked or changed.'}, 'claim_url': {'type': 'string', 'description': 'Present when the subject has no published record (unclaimed or private).'}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name', 'domain', 'select'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'domain': {'type': ['string', 'null']}, 'select': {'type': 'string'}}}, 'description': "trooth_public_trust_profile only, with status bad_input: a name several published companies share. No company was chosen; each entry's select is the exact identifier that reads that one company."}, 'provenance': {'enum': ['witnessed_reading', 'connected_system_reads', 'ledger_token_signatures', 'witnessed_signed', 'signed_scan', 'live_observation', 'honest_absence', 'withheld_by_owner', 'knowledge_base', 'input_error', 'self_declared', 'read_failed'], 'type': 'string', 'description': "Where this answer came from. An honest_absence is missing data, never a judgment about the subject. A read_failed means Trooth could not read its own record at this moment and asserts nothing either way; retry rather than concluding. witnessed_reading: a published profile whose reading Trooth witnessed; the profile is not signed, and the one signed object is the reading's witness statement (see evidence.signed_artifact). connected_system_reads: read from systems the company connected. ledger_token_signatures: the result of checking a Trust Ledger Token's two signatures; the claims inside it stay the company's. witnessed_signed is DEPRECATED since 2026-09-26 and no longer returned; it meant any of the three above."}, 'answered_at': {'type': 'string', 'format': 'date-time', 'description': 'When this server produced this answer (UTC, ISO 8601). It is not the date of the facts: that is source.as_of.'}}, 'description': 'The typed form of every answer a tool completes. A call that fails partway answers isError: true with text only and no structured record.'}
trooth_verify
Check the two signatures on a Trust Ledger Token (tlt2. or tlt. form, or its JTI) against Trooth's own token ledger. 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; the issuing company's signature covers the payload.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['token'], 'properties': {'token': {'type': 'string', 'maxLength': 16384, 'description': 'A Trust Ledger Token (tlt2. or tlt. form) or its JTI'}}}
Schéma de sortie
{'type': 'object', 'required': ['status', 'provenance', 'subject', 'summary', 'answered_at', 'source'], 'properties': {'source': {'type': 'object', 'required': ['name', 'version', 'as_of'], 'properties': {'name': {'type': 'string', 'description': 'The source read: the published record contract on trooth.co, the Trooth Network directory, a live read of the domain, the Trust Ledger, the capability registry or the knowledge base.'}, 'as_of': {'type': ['string', 'null'], 'description': "The date the source carries for this answer: last witnessed, last read, the token's issue date, the entry's check date. Null when it carries none."}, 'version': {'type': ['string', 'null'], 'description': "The source's version: the record contract, the registry or corpus version, or null when the source has none."}}, 'description': 'What this answer was read from, which version of it, and the date that source itself carries. as_of is null when the source carries no date, never a guessed one.'}, 'status': {'enum': ['published', 'listed', 'unclaimed', 'private', 'observed', 'valid', 'invalid', 'expired', 'revoked', 'answered', 'out_of_scope', 'bad_input', 'unavailable'], 'type': 'string', 'description': 'Machine-branchable outcome for this lookup.'}, 'subject': {'type': 'string', 'maxLength': 2048, 'description': 'The company, domain or token this answer is about.'}, 'summary': {'type': 'string', 'maxLength': 8000, 'description': 'The same answer as the text content, for display. Bounded; a longer answer is cut and says where the rest is.'}, 'evidence': {'type': 'object', 'properties': {'counts': {'type': ['object', 'null'], 'properties': {'read': {'type': 'integer'}, 'source': {'enum': ['witness_statement', 'result_tally'], 'type': 'string'}, 'not_read': {'type': ['integer', 'null']}, 'in_reading': {'type': ['integer', 'null']}, 'as_expected': {'type': 'integer'}}, 'description': "The reading's counts, from the source named. witness_statement: read, as expected and not read in this reading. result_tally: an older reading's own tally, not a count of checks read."}, 'schema': {'type': 'string'}, 'omitted': {'type': 'array', 'items': {'type': 'string'}, 'description': 'What the summary leaves out. Every item is in full_record.'}, 'full_record': {'type': 'string', 'description': 'The canonical record as JSON, contract 2, with every typed fact, its provenance and its date where known.'}, 'last_witnessed': {'type': ['string', 'null']}, 'profile_signed': {'type': 'boolean', 'description': 'Always false. The profile is not signed.'}, 'facts_published': {'type': ['integer', 'null']}, 'signed_artifact': {'type': ['object', 'null'], 'properties': {'type': {'type': 'string'}, 'covers': {'type': 'string'}, 'key_id': {'type': 'string'}, 'verify': {'type': 'string'}, 'read_at': {'type': ['string', 'null']}}, 'description': 'The one signed object behind this answer, or null when the reading carries none. It is served, byte for byte as signed, in the witnessStatement field of full_record.'}}, 'description': 'Present on a published profile. What this answer is built from, what it leaves out, and where to get the rest. The summary is a summary: the typed facts with their provenance are in the record at full_record.'}, 'citations': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'source', 'checked'], 'properties': {'id': {'type': 'string'}, 'source': {'type': 'string'}, 'checked': {'type': 'string'}}}, 'description': 'trooth_ask only: the entries the answer was taken from, each with where it comes from and the date it was last checked or changed.'}, 'claim_url': {'type': 'string', 'description': 'Present when the subject has no published record (unclaimed or private).'}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name', 'domain', 'select'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'domain': {'type': ['string', 'null']}, 'select': {'type': 'string'}}}, 'description': "trooth_public_trust_profile only, with status bad_input: a name several published companies share. No company was chosen; each entry's select is the exact identifier that reads that one company."}, 'provenance': {'enum': ['witnessed_reading', 'connected_system_reads', 'ledger_token_signatures', 'witnessed_signed', 'signed_scan', 'live_observation', 'honest_absence', 'withheld_by_owner', 'knowledge_base', 'input_error', 'self_declared', 'read_failed'], 'type': 'string', 'description': "Where this answer came from. An honest_absence is missing data, never a judgment about the subject. A read_failed means Trooth could not read its own record at this moment and asserts nothing either way; retry rather than concluding. witnessed_reading: a published profile whose reading Trooth witnessed; the profile is not signed, and the one signed object is the reading's witness statement (see evidence.signed_artifact). connected_system_reads: read from systems the company connected. ledger_token_signatures: the result of checking a Trust Ledger Token's two signatures; the claims inside it stay the company's. witnessed_signed is DEPRECATED since 2026-09-26 and no longer returned; it meant any of the three above."}, 'answered_at': {'type': 'string', 'format': 'date-time', 'description': 'When this server produced this answer (UTC, ISO 8601). It is not the date of the facts: that is source.as_of.'}}, 'description': 'The typed form of every answer a tool completes. A call that fails partway answers isError: true with text only and no structured record.'}
Modifié
trooth_verify
1 October 2026 02:42
Modifié
trooth_public_trust_profile
1 October 2026 02:42
Modifié
trooth_outside_in_read
1 October 2026 02:42
Modifié
trooth_ask
1 October 2026 02:42
Modifié
trooth_verify
29 September 2026 02:48
Modifié
trooth_ask
29 September 2026 02:48
Modifié
trooth_outside_in_read
29 September 2026 02:48
Modifié
trooth_public_trust_profile
29 September 2026 02:48
Ajouté
trooth_verify
27 September 2026 02:40
Ajouté
trooth_ask
27 September 2026 02:40
Ajouté
trooth_outside_in_read
27 September 2026 02:40
Ajouté
trooth_public_trust_profile
27 September 2026 02:40