Skip to main content
Glama
fredyee

HallucC — Hallucination Fact-Check & AI Safety Guard

HallucC MCP Server

中文文档 | Live Demo | Official MCP Registry

MCP Registry npm License: MIT

Give your AI a fact-checker and a safety gateway: claim-by-claim hallucination detection, agent trajectory evaluation, L0-L3 risk gating for Computer-Use Agent (CUA) actions, Agent source code static audit, and a 40+ feature prompt-injection / jailbreak guard — one MCP server, five tools, works with Claude Code / Cursor / Claude Desktop.

See it first — no sign-up required

Related MCP server: Verity MCP

Tools (5)

Tool

Backend endpoint

What it does

Quota

verify_text

POST /detect

Claim-by-claim hallucination check: red/yellow/green summary + per-claim status/confidence/reason/sources + citations

✅ detect

verify_agent

POST /detect-agent

Text-level verification of an agent's final output + 6-dimension trajectory evaluation (factuality / sourcing / instruction compliance / tool-claim consistency / task completion / reflection)

✅ detect

check_cua_actions

POST /cua/classify

L0-L3 risk classification for Computer-Use Agent (CUA) actions + takeover (credential scenarios); covers sensitive paths/destructive commands, domain grading, payment-amount thresholds, task_scope intent deviation, and multi-agent delegation-chain taint analysis; response includes ruleset_version and disclaimer (pure rules, no LLM)

❌ free

check_cua_code_audit

POST /cua/audit-code

Static audit of Agent source code: dangerous imports / permission boundaries / injection surfaces / dangerous defaults / sandbox absence

❌ free

check_safety

POST /guard/check (fast=true → /guard/check-fast)

40+ feature safety gateway: prompt injection / jailbreak / harmful content / PII leakage / fraud

✅ detect

Auth model: each client sends Authorization: Bearer <your HallucC API key> → the server forwards it as-is to the backend → the backend validates and deducts from the same account quota as the web app. Keys travel only in HTTP headers — never in tool arguments, never in model transcripts.

The tightening capabilities of check_cua_actions

Field

Effect

actions[].target_url / url

Target URL of a browser action — navigation to an unknown domain escalates to L2; pasting sensitive content to a non-allowlisted domain escalates to L3; blacklisted domains are L3

task_scope.task

Declares the intended task, used for deviation detection and audit traceability

task_scope.allowed_apps / allowed_domains

Allowed apps / domains (domain suffix matching includes subdomains)

task_scope.forbidden_elements

Forbidden element labels (highest precedence)

actions[].chain_id

Multi-agent delegation chain id (uuid hex) — when given, the response gains a chain_trace cross-hop taint analysis

actions[].agent_id / parent_agent_id

The agent owning this action / its delegating parent — pairs cross-agent-boundary propagation chains

actions[].delegation_depth

Delegation depth (root agent = 0); a subagent exfiltrating content matching sensitive patterns gets an L2

An action that leaves task_scope is escalated one level (L0→L1, L1→L2, L2 stays L2 with an "outside task scope" reason appended, L3 unchanged). This mechanism only tightens and never loosens; omitting task_scope has no effect. Credential fields and payment/login domains yield a takeover verdict (suspend and wait for the user to type it themselves — the agent never types your password).

Multi-agent setups (Claude Code Task subagents, Codex agents, Kimi, …): a parent agent reading a credential file (L0 on its own) → a subagent posting it out (L2 on its own) is harmless per hop and dangerous as a chain. Attach the delegation-chain fields to each action and the backend appends a chain_trace: when cross-agent propagation exists the chain aggregate level is raised to L3 and risk_diluted is set (the laundering signal). Leave the chain fields empty and behaviour is bit-for-bit unchanged — existing callers need no change.

The response's ruleset_version lets you verify that online detection and the local Gate run the same rule version.

The MCP server is hosted at https://aihcc.cloud/mcp (remote, streamable-http). Point your client at it with your API key:

# Claude Code
claude mcp add --transport http hallucc https://aihcc.cloud/mcp \
  --header "Authorization: Bearer <your HallucC API key>"

Cursor / Claude Desktop work the same way: URL https://aihcc.cloud/mcp, header Authorization: Bearer <key>. Create your API key at https://aihcc.cloud (register → /keys). Free daily quota included.

Or: run via npx (stdio, no clone needed)

{
  "mcpServers": {
    "hallucc": {
      "command": "npx",
      "args": ["-y", "hallucc-mcp"],
      "env": { "HALLUCC_API_KEY": "<your HallucC API key>" }
    }
  }
}

Same five tools over stdio transport; the key comes from the environment and requests default to the hosted backend https://aihcc.cloud/api.

The base URL must keep the /api prefix: nginx only proxies /api/ to the backend. A bare https://aihcc.cloud reaches the frontend instead — the request returns 200 with an HTML body, fails silently (nothing lands in audit or in a fallback file), and the audit replay stays empty.

Run locally (from source)

# 1. Install dependencies
npm install

# 2. (Optional) configure backend address & port; defaults to local :8001
cp .env.example .env
#   HALLUCC_BASE_URL=http://127.0.0.1:8001
#   PORT=8787

# 3. Make sure the backend is up: curl http://127.0.0.1:8001/health
# 4. Start the MCP server (dev with hot reload)
npm run dev
# or production: npm start

The server listens on http://127.0.0.1:8787/mcp; health check GET /health.

Client setup

Claude Code (CLI)

claude mcp add --transport http hallucc http://127.0.0.1:8787/mcp \
  --header "Authorization: Bearer <your HallucC API key>"

claude mcp list
# then in conversation: ask Claude to fact-check a passage or scan a prompt for injection

Cursor

Settings → MCP → Add MCP server:

  • Type: http

  • URL: http://127.0.0.1:8787/mcp

  • Headers: {"Authorization": "Bearer <your HallucC API key>"}

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "hallucc": {
      "type": "http",
      "url": "http://127.0.0.1:8787/mcp",
      "headers": { "Authorization": "Bearer <your HallucC API key>" }
    }
  }
}

MCP Inspector (debug — tool list & auth work without spending quota)

npx @modelcontextprotocol/inspector
# choose Streamable HTTP, URL http://localhost:8787/mcp
# add Custom Header: Authorization: Bearer <key>

Auth & quota

  • Auth is two-tier at the MCP layer. tools/call (and any non-discovery method) requires a format-valid key — hc_ + 48 hex — else 401 JSON-RPC, before the backend is contacted. The format check is a local regex, no backend round-trip.

  • Discovery methods (initialize, tools/list, ping, notifications/initialized) stay open unauthenticated so registries and directory sites can index the server: they make no backend call and expose no user data. Set MCP_ALLOW_ANON_DISCOVERY=0 to gate those too.

  • Actual key validity (existence, revocation, expiry) is always decided by the backend's verify_api_key; the MCP-layer check only rejects tokens that can't possibly be real keys.

  • Valid key but quota exhausted → backend 429, mapped to "free quota exhausted, resets tomorrow or upgrade".

  • Every tool response includes a quota object (backend quota_status), same source as the web dashboard, decremented per call.

  • check_cua_actions and check_cua_code_audit are both pure rules — no LLM, no quota cost, safe for high-frequency use.

Project layout

src/
  server.ts     Express + StreamableHTTP transport (stateless) + auth middleware + tool registration
  context.ts    config loading + API key extraction
  backend.ts    BackendClient (key pass-through, unified 401/429/5xx mapping) + toMcpResult
  schemas.ts    zod input schemas for the 5 tools (aligned with backend Pydantic Fields)
  tools/
    verifyText.ts       → /detect
    verifyAgent.ts      → /detect-agent
    checkCuaActions.ts    → /cua/classify
    checkCuaCodeAudit.ts  → /cua/audit-code
    checkSafety.ts        → /guard/check (fast → /guard/check-fast)
    index.ts            registerAllTools

Transport

Streamable HTTP (the remote transport recommended by the current MCP spec, formerly "HTTP+SSE"), stateless mode: each POST spins up a fresh transport + McpServer and closes when done. Natively supported by Claude Code / Cursor / Claude Desktop. To support legacy SSE-only clients, add SSEServerTransport (dual endpoints /sse + /messages).

Listed on

License

MIT

Available Tools

5 tools
check_cua_actionsAInspect

Computer-Use Agent 动作风险分级。提交动作轨迹 → 逐步返回 L0(放行)/L1(放行+记录)/L2(需确认)/L3(阻断)/takeover(凭据场景挂起等用户亲手输入) 裁决、matched_rules、outcome,及 L0-L3 汇总计数;响应含 ruleset_version(规则库版本)与 disclaimer(本结果仅为分级参考,未执行实际拦截)。覆盖:敏感路径/破坏性命令/不可逆元素语义、域名分级(未知域导航 L2、黑名单域与敏感粘贴到未知域 L3、支付金额超阈值 L3)、凭据词表与支付/登录域 takeover、task_scope 任务意图偏离(越界升一级,只能收窄)、多智能体委托链字段(每条动作可选 chain_id/agent_id/parent_agent_id/delegation_depth,给了则服务端追加链级跨跳污点分析:跨 agent 传播时聚合级别抬到 L3 并置 risk_diluted,返回在 chain_trace 字段;未给则零影响)。纯规则判定,不调 LLM、不耗额度。用于在 agent 执行前/后做安全自检。

NameRequiredDescriptionDefault
actionsYes待分级的动作序列(1~500 条)
session_idNo给了则把分级结果写入审计表,可在 /cua/audit 回放
task_scopeNo任务意图对齐(收窄机制):动作越出 scope 时升一级处置(L0→L1、L1→L2、L2 保持但追加原因、L3 不变)。只能升级不能降级;不传则零影响。

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it states the tool is pure rule-based ('不调 LLM、不耗额度'), advisory-only ('未执行实际拦截'), and discloses that task_scope can only escalate, that optional delegation-chain fields have zero impact when omitted, and that verdicts are aggregated to L3 with a risk_diluted flag on cross-agent propagation. It omits auth/permission requirements and error/limit behavior, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The content is front-loaded with the core verb, but it is delivered as one very long semicolon-joined paragraph and repeats schema-level details (delegation_depth escalation, task_scope narrowing). Information density is high, yet structure and non-redundancy are only adequate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must cover returns, and it does: matched_rules, outcome, per-level counts, ruleset_version, disclaimer, and chain_trace are all named, alongside which rule categories are covered. An agent has enough to call and interpret the tool, with only minor gaps around permissions and failure modes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every action field, alias, and nested scope property, making 3 the baseline. The description adds some cross-parameter meaning (scope narrowing only escalates, chain_id/agent_id/parent_agent_id trigger server-side chain taint analysis, session_id writes to the audit table), but it largely restates what the schema descriptions already say.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource: grade a Computer-Use Agent action trajectory, returning per-step L0–L3/takeover verdicts plus matched_rules, outcome and summary counts. It clearly distinguishes itself from a generic safety check by being trajectory/action-oriented, but never names its siblings (check_cua_code_audit, check_safety, verify_text) to make the boundary explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete usage context: '用于在 agent 执行前/后做安全自检' (run before/after agent execution as a safety self-check). That is clear context, but there are no exclusions and no explicit routing against the sibling safety tools, so it stops short of a full when/when-not statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_cua_code_auditBInspect

CUA 代码审计:静态分析 Agent 源码,检测危险导入(subprocess/os.system 等)、权限边界(eval/exec)、注入面(字符串拼接 shell)、危险默认值、沙箱缺失。纯规则扫描,不调 LLM、不耗额度。支持单文件或多文件扫描。

NameRequiredDescriptionDefault
codeNo单文件模式:要扫描的源代码文本(≤50000 字符),与 files 二选一
filesNo多文件模式:[{path, content, language?}] 数组,与 code 二选一
filenameNo单文件模式:文件名,用于报告中标识(默认 input.py)
languageNo语言提示,auto 时按 filename 扩展名推断(默认 auto)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose meaningful behavior: it is a deterministic rule scan that calls no LLM and consumes no quota. It also implies a read-only, non-mutating operation. It stops short of describing the resulting report, severity levels, or any limits, leaving notable behavioral gaps for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight paragraph that front-loads the core purpose, then the detection categories, then the behavioral trait and file-mode note. Every clause carries information; the enumeration is dense but relevant, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema and no annotations, so the description should ideally characterize the audit report it returns; instead it only describes what is scanned and how. It covers purpose, detection scope, and the quota-free nature well, but the absence of any return-value or result-shape description leaves a real gap for a scanning tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents code, files, filename, and language in detail (including the 二选一 / mutually-exclusive relationship). The description adds little parameter-level meaning beyond reiterating single-file vs multi-file support, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (静态分析 Agent 源码 / statically analyze Agent source code) and enumerates exactly what it looks for (dangerous imports, eval/exec, injection surface, dangerous defaults, missing sandbox). An agent can tell it is a code auditor. However, it never names or distinguishes itself from sibling scanners (check_safety, verify_agent, check_cua_actions), so it misses the 5 bar for sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause '纯规则扫描,不调 LLM、不耗额度' implies a usage context (prefer this deterministic, quota-free check) and '支持单文件或多文件扫描' hints at input modes, which are implied usage cues. But there is no explicit when-to-use, when-not, or routing versus the other check_*/verify_* siblings, so guidance stays at the inferred level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_safetyAInspect

AI 安全网关检测。对 prompt + output 跑 OWASP LLM Top 10 三层检测:40+ 特征规则引擎(注入/越狱/有害内容/敏感信息泄露/欺诈)+ 可选 LLM 深度分析 + 可选幻觉检测。返回 passed、risk_score、risk_level、threats[](category/severity/match_context/recommendation)、quota。fast=true 走纯规则 <10ms 模式。耗 detect 额度(fast 亦计入)。

NameRequiredDescriptionDefault
fastNotrue 走纯规则快速模式(<10ms,无 LLM)→ /guard/check-fast;默认 false 走完整 /guard/check
outputYesAI 响应(≥1 字,≤50000 字)
promptNo用户原始输入(默认空,≤50000 字)
check_hallucinationNo是否同时检测幻觉,默认 false

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and largely delivers: it discloses that the tool runs rule-based plus optional LLM checks, returns specific risk fields, supports a fast <10ms mode, and consumes detect quota even in fast mode. It does not discuss mutability or side effects, but for a detection tool this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loaded, stating the core purpose first, then detection layers, return schema, fast-mode behavior, and quota impact. Every sentence conveys actionable information without redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description compensates by naming the main return fields (passed, risk_score, risk_level, threats[], quota) and by explaining fast-mode routing. It does not describe possible errors or quota limits in detail, but for a 4-parameter safety check tool the provided context is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by clarifying the fast-mode semantics, the prompt+output relationship, optional hallucination checking, and the returned risk structure. This is more than the schema alone provides, so a 4 is justified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: an AI safety gateway that detects OWASP LLM Top 10 risks on prompt and output. It further distinguishes the tool by enumerating rule engine dimensions, optional LLM analysis, and hallucination detection, making it easy to tell apart from siblings like verify_text or verify_agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: whenever an AI prompt/output needs safety screening. It also explains the fast-mode vs full-mode choice and quota behavior excluded. However, it does not explicitly mention cases where sibling tools should be used instead, so no exclusions or when-not guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_agentAInspect

Agent 输出与轨迹自检。对最终回答跑逐声明幻觉核验,并对执行轨迹做六维结构化评估(事实性/来源/指令合规/工具声明一致/任务完成/反思)。返回 main.claims、steps[].checks、quota。耗 detect 额度。

NameRequiredDescriptionDefault
taskNo原始任务指令(task_completion 裁判用)
speedNo速度模式:fast|standard|deep,默认 standard
stepsNoagent 执行轨迹,逐步六维评估
domainNo领域模式:general|medical|legal|finance|education|government
agent_outputYesagent 最终输出文本(≥1 字,≤50000 字)
tool_schemasNo工具 Schema(与 trajectory 端点对齐)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose a meaningful behavioral trait: '耗 detect 额度' (consumes detect quota), effectively a cost/rate-limit warning, and clarifies the evaluation dimensions and return payload. It omits failure modes, error behavior, and how quota is shared across calls, but for a non-mutating analysis tool the disclosed cost and output structure are adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three terse sentences in the source language with zero filler. Purpose is front-loaded first, then return values, then cost. Every clause carries information – no repetition of the tool name or schema content. Efficient and well-ordered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with 6 params and nested objects but no output schema, the description compensates reasonably by naming the return fields (main.claims, steps[].checks, quota) and the quota-cost behavior. It does not fully explain the return structure's semantics or the effect of speed/domain switches, but for an analysis tool the coverage is strong.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema fully documents all six parameters. The description adds only framing: it ties 'task' to task_completion judging and maps the six dimensions to steps[].checks, but does not explain the semantics of speed modes (fast|standard|deep), domain values, or tool_schemas beyond what the schema already provides. Baseline 3 applies since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource pair ('Agent 输出与轨迹自检' – output and trajectory self-check) and details exactly what it does: per-claim hallucination verification plus a six-dimension structured evaluation (事实性/来源/指令合规/工具声明一致/任务完成/反思). It names the concrete return structures, making the tool's function unambiguous and distinct from simpler verifiers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The scope is implied through the six evaluation dimensions and the agent_trajectory param, which signals this is for full agent runs rather than single strings. However, it never explicitly contrasts with siblings like verify_text, check_cua_actions, or check_safety, nor states when NOT to use it. The '耗 detect 额度' cost note is useful resource guidance but not a when/when-not rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_textBInspect

逐声明幻觉核验。输入文本 → 提取声明 → 逐声明验证(supported/refuted/unverified)+ 来源引用。返回红/黄/绿汇总、每条声明的状态/置信度/理由/来源、citations、quota。耗 detect 额度(与 Web 端同源)。

NameRequiredDescriptionDefault
textYes待核验的文本
modelNo被测模型名(选填,分享卡片展示用)
speedNo速度模式:fast|standard|deep,默认 standard
domainNo领域模式:general|medical|legal|finance|education|government
strictNo严格模式(自我一致性),不传走全局默认

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose that the tool consumes detect quota (a side effect) and describes the return structure (red/yellow/green summary, per-claim details, citations, quota). However, it does not mention potential rate limits, authentication, or any other operational behaviors. The disclosure is partial but not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense paragraph that front-loads the core purpose ('逐声明幻觉核验') and follows with the pipeline and output details. Every clause adds value, and there is no redundant fluff. It is concise yet information-dense, though it could benefit from bullet points for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is no output schema, the description appropriately describes the return format (summary, per-claim details, citations, quota). It also mentions the quota cost. However, it does not address error scenarios, retry behavior, or any edge cases like empty text (though schema enforces minLength). For a tool with this complexity and 5 parameters, the description is mostly complete but could mention what happens on failure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all 5 parameters, so the schema itself provides clear meanings for each field. The tool description adds no additional parameter-specific context beyond the overall pipeline. Given the high schema coverage, a baseline of 3 is appropriate; the description does not need to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: verifying statements in input text for hallucinations, with a specific pipeline (extract claims, verify each) and output types. It is specific about the verb and resource. However, it does not explicitly distinguish itself from sibling tools like verify_agent, though the name 'verify_text' suggests a text-focused scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention when it is appropriate or when to choose verify_agent or other siblings. The only usage-related note is that it consumes detect quota, which is a cost constraint but not a usage guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.1.10
    • Changedcheck_cua_actions8 fields changed
      • addedInput schema / properties / actions / items / properties / agent_id
        Added value: +{
        +  "description": "P1-9 本动作所属 Agent 名(如 research),配合 registered_agents 做注册校验",
        +  "type": "string"
        +}
      • addedInput schema / properties / actions / items / properties / chain_id
        Added value: +{
        +  "description": "P1-9 多智能体委托链 id(uuid hex);给了则审计按 chain_id 跨会话聚合,可在 /cua/audit 看链路视图",
        +  "type": "string"
        +}
      • addedInput schema / properties / actions / items / properties / delegation_depth
        Added value: +{
        +  "description": "P1-9 委托深度(根 Agent=0);超 delegation_max_depth 升 L2",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / actions / items / properties / parent_agent_id
        Added value: +{
        +  "description": "P1-9 委托方 Agent 名;跨 agent 边界的传播链由此配对",
        +  "type": "string"
        +}
      • addedInput schema / properties / actions / items / properties / target_url
        Added value: +{
        +  "description": "浏览器动作的目标 URL(域名分级 / 未知域导航 / 粘贴到未知域规则用)",
        +  "type": "string"
        +}
      • addedInput schema / properties / actions / items / properties / task_scope
        Added value: +{
        +  "description": "P1-5 任务允许范围声明(服务端按动作读取;越界升一级,只能收窄)",
        +  "properties": {
        +    "allowed_apps": {
        +      "description": "允许的前台应用白名单",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "allowed_domains": {
        +      "description": "允许访问的域名白名单(后缀匹配含子域)",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "forbidden_elements": {
        +      "description": "禁止出现的元素标签(最高优先级)",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "task": {
        +      "description": "声明的任务意图(如「整理本周会议纪要」)",
        +      "minLength": 1,
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "task"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / actions / items / properties / url
        Added value: +{
        +  "description": "target_url 别名",
        +  "type": "string"
        +}
      • addedInput schema / properties / task_scope
        Added value: +{
        +  "description": "任务意图对齐(收窄机制):动作越出 scope 时升一级处置(L0→L1、L1→L2、L2 保持但追加原因、L3 不变)。只能升级不能降级;不传则零影响。",
        +  "properties": {
        +    "allowed_apps": {
        +      "description": "允许的前台应用白名单",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "allowed_domains": {
        +      "description": "允许访问的域名白名单(后缀匹配含子域)",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "forbidden_elements": {
        +      "description": "禁止出现的元素标签(最高优先级)",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "task": {
        +      "description": "声明的任务意图(如「整理本周会议纪要」)",
        +      "minLength": 1,
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "task"
        +  ],
        +  "type": "object"
        +}
    • Addedcheck_cua_code_audit
  2. 4 tool updatesv0.1.0
    • First observedcheck_cua_actions
    • First observedcheck_safety
    • First observedverify_agent
    • First observedverify_text

TDQS

A3.6/5.0

Scored across 5 tools

Disambiguation3/5

The CUA-specific tools (check_cua_actions, check_cua_code_audit) and check_safety are clearly distinct, but verify_agent, verify_text, and check_safety overlap substantially — check_safety includes hallucination detection, verify_agent runs claim verification plus trajectory evaluation, and verify_text does claim verification on plain text. An agent must read carefully to decide whether to call verify_text vs verify_agent vs check_safety for a given output.

Naming Consistency4/5

All names are snake_case verb_noun with consistent structure and a sensible cua namespace prefix for the computer-use tools. The only blemish is mixing the verbs check_ and verify_ across functionally similar tools, which makes the prefix grouping slightly less predictable than a single-verb scheme would be.

Tool Count5/5

Five tools is well-scoped for a guard/verification server, with each tool earning its place across two sub-domains (CUA safety and general content verification). Nothing feels padded or redundant enough to be a separate trivial endpoint.

Completeness4/5

The surface covers the core lifecycle: pre-execution action grading, source code auditing, prompt/output safety gating, and post-hoc output/claim verification. Minor gaps exist, such as no tool to inspect ruleset metadata, quota/history, or batch verification, but these are workarounds rather than blockers.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    MCP server exposing Verity's trust checks as tools (verify_fact, detect_injection, moderate_content, redact_pii, guard_action) that any MCP-capable agent can discover and call for fail-closed safety verification before spending or sending.
    8
    41 PyPI
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables secure interoperability between LLM agents and MCP tool servers by sanitizing requests and responses, masking sensitive tokens, detecting PII, and performing server reputation scans.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables safe use of any MCP server by proxying and live-scanning all tool requests and responses, blocking or redacting poison descriptions, indirect prompt injection, malicious arguments, and unauthorized destinations.
    -