crosscheck

Checks for AI agents over x402: review drafts, accept-check handoffs, scan skills before install.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
96%
Naming quality
85%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,436Tokens (tool definitions)
~2.1 KBTypical response size
Moderate attention impact (1.90% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "crosscheck": {
      "command": "npx",
      "args": [
        "crosscheckapi"
      ]
    }
  }
}

Runnable packages

npmcrosscheckapi0.6.0stdio

Remote endpoints

https://crosscheckapi.com/mcpstreamable-http

What it can do

Tool inventory

Tools (8)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢check(draft, request, sources, source_urls, fetch_cited, ...)

Independent review of a draft (email, report, summary, PR description) before its human sees it. Returns pass or specific issues with fixes; arithmetic is recomputed in code. With request (what the human asked), it also checks the draft answers that. With sources, each claim is checked against them and quotes are verified; with source_urls or fetch_cited, crosscheck fetches up to 3 web pages itself and checks against those (+$0.01 a page, and a dead link the draft gives fails it). $0.02. Paid per call in USDC over x402 (Base, or free test USDC on Base Sepolia). An x402-aware MCP client pays automatically: the first call returns the price as an x402 PaymentRequired error, and the retry carries the payment in _meta["x402/payment"]. Without one, use the npm client `npx -y crosscheckapi`, which pays from a wallet you set.

Input Schema

{
  "type": "object",
  "properties": {
    "draft": {
      "type": "string",
      "description": "The draft text to review",
      "maxLength": 48000
    },
    "request": {
      "type": "string",
      "description": "Optional: what the human asked for, word for word if you have it. The reviewer then also checks that the draft answers it (a missed question, a changed scope, a wrong period)",
      "maxLength": 8000
    },
    "sources": {
      "type": "array",
      "maxItems": 10,
      "description": "Optional texts the draft relies on; turns on grounding",
      "items": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Source text"
          },
          "title": {
            "type": "string",
            "description": "Optional title"
          },
          "url": {
            "type": "string",
            "description": "Optional URL"
          }
        },
        "required": [
          "text"
        ]
      }
    },
    "source_urls": {
      "type": "array",
      "maxItems": 3,
      "items": {
        "type": "string",
        "description": "A public http or https URL"
      },
      "description": "Optional: up to 3 web pages crosscheck fetches after payment and checks the draft against, as sources. +$0.01 each"
    },
    "fetch_cited": {
      "type": "boolean",
      "description": "Optional: also fetch the links the draft itself cites (up to 3 pages in all, +$0.01 each); a link that is gone fails the draft"
    },
    "open_review": {
      "type": "boolean",
      "description": "Optional: let a qualified outside reviewer take the job (not routed yet; crosscheck's reviewer does it and the receipt says so)"
    },
    "moltbook_identity": {
      "type": "string",
      "description": "Optional: a Moltbook identity token for the free tier, when it is on (a verified Moltbook agent gets free checks with no payment). Not stored. Without a free check left, the price comes back as usual"
    },
    "ref": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$",
      "description": "Optional: the hash of a crosscheck receipt that brought you here. Its wallet earns check credits from your first 90 days of spend."
    }
  },
  "required": [
    "draft"
  ]
}
⚪accept(task, deliverable, reference, payment_tx, payment_network, ...)

Checks work another agent handed back against the task it was given, before you pay, release escrow, or pass it on. Returns accept, reject, or verify_externally with every requirement judged; counts, required JSON fields, and sums are checked in code. Optional payment_tx is verified on chain. $0.03 base. Paid per call in USDC over x402 (Base, or free test USDC on Base Sepolia). An x402-aware MCP client pays automatically: the first call returns the price as an x402 PaymentRequired error, and the retry carries the payment in _meta["x402/payment"]. Without one, use the npm client `npx -y crosscheckapi`, which pays from a wallet you set.

Input Schema

{
  "type": "object",
  "properties": {
    "task": {
      "type": "string",
      "description": "The task as given to the other agent"
    },
    "deliverable": {
      "type": "string",
      "description": "What came back"
    },
    "reference": {
      "type": "string",
      "description": "Optional reference material the task points to"
    },
    "payment_tx": {
      "type": "string",
      "description": "Optional transaction hash of the payment for this work"
    },
    "payment_network": {
      "type": "string",
      "description": "Network of payment_tx, for example eip155:8453"
    },
    "ref": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$",
      "description": "Optional: the hash of a crosscheck receipt that brought you here. Its wallet earns check credits from your first 90 days of spend."
    }
  },
  "required": [
    "task",
    "deliverable"
  ]
}
⚪skillcheck(files, fresh, ref)

Security review of a skill or MCP server's files before you install or connect it: read, never run. Free when these exact files were scanned before (looked up by bundle hash); otherwise paid, $0.03 base. Never says safe. Paid per call in USDC over x402 (Base, or free test USDC on Base Sepolia). An x402-aware MCP client pays automatically: the first call returns the price as an x402 PaymentRequired error, and the retry carries the payment in _meta["x402/payment"]. Without one, use the npm client `npx -y crosscheckapi`, which pays from a wallet you set.

Input Schema

{
  "type": "object",
  "properties": {
    "files": {
      "type": "array",
      "minItems": 1,
      "maxItems": 200,
      "description": "Every text file of the skill or server, docs included; code rules read all of them",
      "items": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "Path inside the skill"
          },
          "content": {
            "type": "string",
            "description": "File content"
          }
        },
        "required": [
          "path",
          "content"
        ]
      }
    },
    "fresh": {
      "type": "boolean",
      "description": "Scan again even when a past scan of these exact files exists"
    },
    "ref": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$",
      "description": "Optional: the hash of a crosscheck receipt that brought you here. Its wallet earns check credits from your first 90 days of spend."
    }
  },
  "required": [
    "files"
  ]
}
⚪sellercheck(resource, method, network)

For x402 sellers: one dated report on your own paid resource, by code alone. Does it answer a valid 402 (v1 or v2: price, network, payTo), is it in the x402 Bazaar index, would agent402's router route to it, and how many USDC settlements reached its payTo on Base in 24 hours and 7 days. Nothing is paid to the resource. $0.05. Paid per call in USDC over x402 (Base, or free test USDC on Base Sepolia). An x402-aware MCP client pays automatically: the first call returns the price as an x402 PaymentRequired error, and the retry carries the payment in _meta["x402/payment"]. Without one, use the npm client `npx -y crosscheckapi`, which pays from a wallet you set.

Input Schema

{
  "type": "object",
  "properties": {
    "resource": {
      "type": "string",
      "description": "The full URL of your x402 resource (public http or https)",
      "maxLength": 300
    },
    "method": {
      "type": "string",
      "enum": [
        "GET",
        "POST"
      ],
      "description": "Optional: the method it is paid with; default tries GET, then POST"
    },
    "network": {
      "type": "string",
      "enum": [
        "eip155:8453"
      ],
      "description": "Optional: Base, the only network read today"
    }
  },
  "required": [
    "resource"
  ]
}
⚪sellerwatch(resource, method, network, notify)

For x402 sellers: sellercheck every hour for 30 days on one resource, paid once. An alert to your webhook (JSON POST) or ntfy topic only when something changes: the 402 breaks or its price or payTo change, it leaves or rejoins the Bazaar index, agent402's router flips, settlements start, double, or halve, or it is down twice in a row. Returns a public record page to link from your listing. $1. Paid per call in USDC over x402 (Base, or free test USDC on Base Sepolia). An x402-aware MCP client pays automatically: the first call returns the price as an x402 PaymentRequired error, and the retry carries the payment in _meta["x402/payment"]. Without one, use the npm client `npx -y crosscheckapi`, which pays from a wallet you set.

Input Schema

{
  "type": "object",
  "properties": {
    "resource": {
      "type": "string",
      "description": "The full URL of your x402 resource (public http or https)",
      "maxLength": 300
    },
    "method": {
      "type": "string",
      "enum": [
        "GET",
        "POST"
      ],
      "description": "Optional: the method it is paid with; default tries GET, then POST"
    },
    "network": {
      "type": "string",
      "enum": [
        "eip155:8453"
      ],
      "description": "Optional: Base, the only network read today"
    },
    "notify": {
      "type": "object",
      "description": "Where alerts go, at least one: webhook (a public https URL) and/or ntfy (an ntfy.sh topic)",
      "properties": {
        "webhook": {
          "type": "string",
          "description": "A public https URL"
        },
        "ntfy": {
          "type": "string",
          "description": "An ntfy.sh topic",
          "maxLength": 64
        }
      }
    }
  },
  "required": [
    "resource",
    "notify"
  ]
}
⚪skillcheck_lookup(bundle_sha256)

Free. The latest skillcheck of an exact bundle, by its bundle_sha256 (SHA-256 of the canonical JSON of the files sorted by path, each as {path, sha256}).

Input Schema

{
  "type": "object",
  "properties": {
    "bundle_sha256": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$"
    }
  },
  "required": [
    "bundle_sha256"
  ]
}
🟢verify_receipt(receipt_hash, receipt, draft, request, sources, ...)

Free. Before trusting work that arrives with a crosscheck receipt, check in code that crosscheck issued it, its signature is valid, what the outcome was, and that it covers exactly the text you were handed. Pass receipt_hash (or the receipt object) plus that text: draft, request, and sources for check, task and deliverable for accept, files for skillcheck, and the verdict if one came with it.

Input Schema

{
  "type": "object",
  "properties": {
    "receipt_hash": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$",
      "description": "The receipt's hash (the last part of its /r/ proof link)"
    },
    "receipt": {
      "type": "object",
      "description": "Or the whole receipt object {body, hash, sig}"
    },
    "draft": {
      "type": "string",
      "description": "check: the draft the receipt should cover"
    },
    "request": {
      "type": "string",
      "description": "check: the human's request, if the check had one"
    },
    "sources": {
      "type": "array",
      "description": "check: the sources, if the check had any, in the same order (strings or {text})"
    },
    "task": {
      "type": "string",
      "description": "accept: the task the receipt should cover"
    },
    "deliverable": {
      "type": "string",
      "description": "accept: the deliverable the receipt should cover"
    },
    "files": {
      "type": "array",
      "description": "skillcheck: the skill's files",
      "items": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "Path inside the skill"
          },
          "content": {
            "type": "string",
            "description": "File content"
          }
        },
        "required": [
          "path",
          "content"
        ]
      }
    },
    "verdict": {
      "type": "object",
      "description": "The verdict that came with the receipt, to confirm nobody edited it"
    }
  }
}
⚪result(job_id, result_token)

Free. Status, verdict, and signed receipt of an earlier paid call that was still running, using the job_id and result_token it returned.

Input Schema

{
  "type": "object",
  "properties": {
    "job_id": {
      "type": "string",
      "description": "job_id from the paid call"
    },
    "result_token": {
      "type": "string",
      "description": "result_token from the paid call"
    }
  },
  "required": [
    "job_id",
    "result_token"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded8 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools