Dutiful

work.dutiful由 dutiful.work 發布官方發布者v1.0.0更新於 Nov 2, 2026

Cited company background reports for agents from official registries. $3 per report via x402.

已驗證Streamable HTTP可網頁執行金融商業與電商

概覽

AI 產生的概覽

Dutiful 是遠端 MCP 伺服器,讓助理在官方登記資料庫查詢公司,並以 3 美元 USDC 購買附引用的背景報告。

可以做什麼
  • 在 12 個國家的官方登記資料庫依公司名稱檢索,免費回傳相符實體及其登記編號、名稱與地址
  • 為選定的相符實體建立報告訂單,並取得 x402 付款要求(Base 鏈上的 USDC)
  • 查詢訂單狀態,並在付款交付後取得結構化 JSON 與純文字形式的報告
適用情境
適合在供應商或交易對象決策前,需要確認某個公司名稱對應哪個法律實體,並希望取得一份結合登記資料庫事實、僅依名稱篩查 OFAC SDN 與英國制裁名單以及新聞與網路掃描的引用報告時使用。
執行需求
遠端 streamable HTTP 端點;免費涵蓋範圍查詢不需帳號、API 金鑰或錢包。購買報告需要 Base 鏈上的 USDC 以及獨立的 x402 相容錢包簽章步驟。README 中可選的本機快速驗證需要 Node.js 22 與 npm。
安裝前請注意
報告費用為 Base 鏈上 3.00 美元 USDC;create_order 只回傳付款要求、不會付款,付款需另外完成錢包簽章。免費查詢仍會建立或重用待處理訂單紀錄,並受速率限制。報告是基於公開來源的盡力研究,不是合規證明、信用報告或法律意見;不篩查歐盟與聯合國制裁名單,美國僅涵蓋 SEC 申報實體,加拿大僅涵蓋聯邦公司。請勿將待處理訂單 ID 與工作階段標頭寫入公開日誌。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Dutiful,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/work.dutiful%2Fdutiful/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "dutiful": {
      "type": "http",
      "url": "https://dutiful.work/mcp"
    }
  }
}

README

Dutiful - Company background reports for agents

Research you can cite. Before paying a registered supplier, check that the legal entity matches the business you mean. A Dutiful Company Report brings official registry facts, a company-level, name-only screen of the OFAC SDN and UK Sanctions List, and a news and web scan into one cited report. It is background research, not a verdict that a company is safe to trade with.

Check coverage free before buying a report. Registry fields vary by country; US coverage is limited to SEC-reporting entities and Canada to federal corporations. EU and UN lists are not screened. No match is not clearance.

The full Company Report costs $3.00 USDC on Base via x402. Payment requires a separate wallet-signing step; create_order returns payment requirements and does not pay.

For agents (MCP)

Streamable HTTP MCP server: https://dutiful.work/mcp

Tools:

  • check_coverage - check whether a company is in a covered registry (free)
  • create_order - create a report order and get x402 payment requirements
  • get_report - fetch the finished report

Server card: https://dutiful.work/.well-known/mcp/server-card.json

Run a free MCP check (no wallet)

Requires Node.js 22 and npm. Run once in a new folder:

sh
mkdir dutiful-free-check && cd dutiful-free-checknpm init -ynpm install --ignore-scripts --no-audit --no-fund --save-exact @modelcontextprotocol/[email protected]cat > free-check.mjs <<'JS'import { Client } from '@modelcontextprotocol/sdk/client/index.js';import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
const client = new Client({ name: 'dutiful-free-check', version: '1.0.0' }, { capabilities: {} });const transport = new StreamableHTTPClientTransport(new URL('https://dutiful.work/mcp'));try {  // connect sends initialize and notifications/initialized.  await client.connect(transport);  const { tools } = await client.listTools();  console.log('Tools:', tools.map(tool => tool.name).join(', '));  // One free public-company lookup. Do not select a candidate or call create_order.  const result = await client.callTool({    name: 'check_coverage',    arguments: { company: 'J SAINSBURY PLC', country: 'GB' }  }, undefined, { timeout: 60000 });  if (result.isError) throw new Error('Coverage check failed; no paid follow-up was attempted.');  const data = result.structuredContent ?? JSON.parse(result.content.find(item => item.type === 'text').text);  if (!Array.isArray(data.candidates) || data.candidates.length === 0) throw new Error('No suitable match; stop without a paid call.');  // Print public registry fields only, not the pending order ID.  console.log(JSON.stringify({ candidates: data.candidates.map(({ idx, ref, name }) => ({ idx, ref, name })) }, null, 2));} finally {  await client.close();}JSnode free-check.mjs

This calls only check_coverage, not create_order or a payment endpoint. No account, API key, wallet or signature is needed. The free check creates or reuses a pending order/cache record internally; it is zero-payment, not stateless. Rate limits apply, so do not run it repeatedly to poll.

A separate smoke test with SDK 1.32.2 / Node 22.23.4 on 2026-10-29 observed initialization negotiating protocol 2025-06-18, tools/list returning the three tools, and this GB lookup returning five candidates. The SDK's optional background SSE GET returned 405, but the POST-based check completed. This shortened quickstart was syntax-checked and replayed offline, not rerun against the remote service. This is evidence for this client and free flow, not every client or the paid flow.

Example output, abbreviated to public fields (matches can change):

text
Tools: check_coverage, create_order, get_report{  "candidates": [    { "idx": 0, "ref": "00185647", "name": "J SAINSBURY PLC" },    ...  ]}

No candidate is selected and no report is purchased. Keep pending order IDs and session headers out of public logs. If the check fails or finds no suitable match, stop; do not proceed to a paid call.

A free coverage-check example

Question: "Does this name point to the company I mean, and what would a report leave out?"

For a UK company, compare the legal name and company number, not just the trading name. The free Sainsbury's sample identifies J SAINSBURY PLC as company 00185647 and links to its Companies House record. The sample is a dated example, not a current check of that company.

Before paying for your own company check, run check_coverage with the company name and country (for example, {"company":"J SAINSBURY PLC","country":"GB"}). Review the returned matching entities and country-specific report scope. The check is free and does not buy a report. Do not assume which match index will be returned.

The sample's gaps matter: it does not cover credit scores/payment behaviour, PEP screening or civil litigation, and it does not identify beneficial owners beyond what the register publishes. A registry match is not a verdict that a company is safe to trade with. US coverage is limited to SEC-reporting entities and Canada to federal corporations; the company-level sanctions screen covers the OFAC SDN and UK Sanctions List; EU and UN lists are not screened.

If you choose to continue, create_order returns payment requirements, not payment. Company Reports cost $3.00 USDC on Base via x402, with a separate wallet-signing/payment step. Connection and payment quickstart.

For agents (HTTP + x402)

  • POST /api/order {company, country} -> JSON candidates (free)
  • POST /api/order/{order}/entity {idx} -> 402 with x402 v2 payment requirements
  • POST /api/order/{order}/pay with PAYMENT-SIGNATURE header -> paid report
  • GET /api/order/{order} -> status and report

Discovery: /.well-known/x402.json and /openapi.json.

Coverage and limits

12 registries. US coverage is SEC-reporting companies; Canada is federal corporations. The screen covers the OFAC SDN and UK Sanctions List plus a news and web scan; EU and UN lists are not screened. A report is not a credit check or a legal opinion.

Try the report path before paying

  1. Read a sample company report. It shows the report format and sources, not a current assessment of a company you choose.
  2. Check coverage for your company - free. Enter the company and country, then review the exact matched entity and country-specific fields before paying.
  3. If the coverage fits, use the API or MCP flow. Buying a report requires USDC on Base and an x402-compatible wallet flow. create_order returns payment requirements; it does not pay.

A report is not a compliance certificate, credit check or legal opinion. Registry fields vary by country. US coverage is limited to SEC-reporting entities and Canada to federal corporations; EU and UN sanctions lists are not screened.

Sample PDF · Second sample

Badge for integrators

If your agent or service screens counterparties with Dutiful, add this badge to your README:

markdown
[![counterparties screened: dutiful](https://dutiful.work/badge.svg)](https://dutiful.work/developers)

It links to our developer docs so your users can see how the checks work.

Links: https://dutiful.work - https://dutiful.work/developers - https://dutiful.work/check

來源:README.md,提交 8844107

工具

3

check_coverage

Check coverage

Free. Searches the official company register of the given country for the company name and returns the matching entities (idx, registry reference, name, address), an order id, and what a report covers. Nothing is charged. Supported country codes: GB, FR, NO, FI, CZ, EE, SK, LV, IL, CA, CY, US (CA: federal corporations only; US: SEC reporting companies only).

輸入參數company必填country必填

create_order

Create order

Selects one entity from the check_coverage results (idx, starting at 0) and returns the x402 payment requirements for a report (USDC on Base, exact amount in the requirements). This tool does not pay. To pay, send the signed payment in a PAYMENT-SIGNATURE header to the returned pay_url, then read the report with get_report.

輸入參數idx必填company必填country必填

get_report

Get report

Returns the status of an order and, once delivered, the report (structured JSON and plain text). Status values: pending_entity, pending_payment, paid, delivered. An unpaid order returns its payment requirements.

輸入參數order_id必填

版本歷史

1
  1. v1.0.0最新Oct 26, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。