About check
Check a proposed agent action against operator's rules: permit, deny or escalate, with the clause
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://check.hanria.ai/mcpclaude mcp add --transport http ai-hanria-check https://check.hanria.ai/mcp{"mcpServers":{"ai-hanria-check":{"type":"http","url":"https://check.hanria.ai/mcp"}}}Open in Cursor{"servers":{"ai-hanria-check":{"type":"http","url":"https://check.hanria.ai/mcp"}}}Open in VS Code{"mcpServers":{"ai-hanria-check":{"type":"http","url":"https://check.hanria.ai/mcp"}}}{"mcpServers":{"ai-hanria-check":{"serverUrl":"https://check.hanria.ai/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
2| Parameter | Type | Required | Description |
|---|---|---|---|
| action | object | Yes | A typed description of a proposed operation, submitted by an agent to a local HANRIA runtime. MUST NOT contain credentials, secrets, private keys, or tokens. |
| action.operation | object | Yes | |
| action.operation.kind | enum | Yes | file | process | package | network | device | credential_use | transaction | administrative |
| action.operation.verb | string | Yes | What is to be done to the target, e.g. read, write, execute, install, connect, sign, transfer. Required: an operation named only by its kind does not describe a proposed action well enough to be judged. |
| action.operation.amount | object | No | An amount. Both fields are required: a bare amount object describes nothing a ceiling could be compared against. |
| action.operation.amount.value | string | Yes | Decimal as a string, to avoid float error. |
| action.operation.amount.currency | string | Yes | |
| action.operation.target | string | Yes | What the operation acts on. A path, host, package name, or resource identifier. NEVER a secret. Required for the same reason as the verb. |
| action.operation.parameters | object | No | Non-secret parameters. A runtime MUST reject any request whose parameters appear to contain a credential. |
| action.operation.counterparty | string | No | |
| action.mandate_ref | string | No | Optional reference to the owner-defined mandate the agent believes authorizes this. |
| action.requested_by | object | Yes | |
| action.requested_by.agent | string | Yes | Identifier of the requesting agent. |
| action.requested_by.session | string | No | Optional session or task identifier. |
| action.requested_by.on_behalf_of | string | No | Optional identifier of the human or system the agent acts for. |
| action.justification | string | Yes | Why the agent believes this is within its mandate. Free text, for the record. |
| action.schema_version | any | Yes | Draft. The runtime does not exist; this shape may change. |
| action.idempotency_key | string | No | Optional. Lets a runtime refuse a duplicate rather than perform an operation twice. |
| mandate | object | Yes | An operator-authored statement of what an agent may do. Written by a person, read by an agent, evaluated locally. A mandate is advisory: it describes intended authority and supports a local check, but it does not enforce anything. Enforcement requires a component that exclusively holds the credentials and can refuse. |
| mandate.clauses | array | Yes | Evaluated in order. The first matching clause decides. A request matching no clause takes the mandate default. |
| mandate.default | enum | Yes | What happens when no clause matches. 'permit' is deliberately not an option: a mandate that permits by default cannot express a limit.deny | escalate |
| mandate.purpose | string | Yes | What the agent is authorized to accomplish, in the operator's own words. Not evaluated mechanically; it is the human-readable statement against which a reviewer judges whether the clauses actually express the intent. |
| mandate.issued_by | string | No | Who wrote this mandate. Free text; not authenticated by anything in this skill. |
| mandate.mandate_id | string | Yes | Stable identifier for this mandate. Appears in every decision record made against it. |
| mandate.requires_human | array | No | Operation kinds that always require a person, even where a clause permits them. These escalate rather than permit. |
| mandate.schema_version | any | Yes | Draft. The shape may change while the runtime is in development. |
| mandate.not_valid_after | string | No | RFC 3339 timestamp. After this instant every action is denied. Absent means no expiry, which is discouraged: an unbounded mandate is the condition that lets delegated authority outlive the task it was granted for. |
Details
The maintainer has not added details yet. Check the README in the repository.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.