MCPサーバー

Trooth

io.github.trooth-eng/trooth-network
セキュリティ 公開・接続可能 MCP 2025-11-25

この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.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'required': ['question'], 'properties': {'question': {'type': 'string', 'maxLength': 500, 'description': 'A question about Trooth'}}}
出力スキーマ
{'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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'maxLength': 2048, 'description': 'Domain to read, e.g. example.com'}}}
出力スキーマ
{'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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['company'], 'properties': {'company': {'type': 'string', 'maxLength': 2048, 'description': 'Company domain (e.g. acme.com) or Trooth slug'}}}
出力スキーマ
{'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.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'required': ['token'], 'properties': {'token': {'type': 'string', 'maxLength': 16384, 'description': 'A Trust Ledger Token (tlt2. or tlt. form) or its JTI'}}}
出力スキーマ
{'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
2026年10月1日2:50
変更
trooth_public_trust_profile
2026年10月1日2:50
変更
trooth_outside_in_read
2026年10月1日2:50
変更
trooth_ask
2026年10月1日2:50
変更
trooth_verify
2026年9月29日2:58
変更
trooth_ask
2026年9月29日2:58
変更
trooth_outside_in_read
2026年9月29日2:58
変更
trooth_public_trust_profile
2026年9月29日2:58
変更
trooth_verify
2026年9月27日2:49
変更
trooth_ask
2026年9月27日2:49
変更
trooth_outside_in_read
2026年9月27日2:49
変更
trooth_public_trust_profile
2026年9月27日2:49
追加
trooth_verify
2026年9月17日12:52
追加
trooth_ask
2026年9月17日12:52
追加
trooth_outside_in_read
2026年9月17日12:52
追加
trooth_public_trust_profile
2026年9月17日12:52