# Knox Anchor

> Bitcoin-anchored, tamper-evident audit-permanence layer for AI agents, FRE 902(13)/(14)-shaped.

- name: com.bonissystems/knox-anchor
- version: 1.0.1
- connection class: R0 (autonomous)
- trust: 75/100 flags: no-repository
- quality: 79/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.bonissystems%2Fknox-anchor
- tools: https://api.protogrid.dev/v1/servers/com.bonissystems%2Fknox-anchor/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "knox-anchor": {
      "type": "http",
      "url": "https://bonissystems.com/api/knox/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 99
- freshness: 65
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-97% ~updated-173d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 79/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-03-26; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 71 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: get_descriptor (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_chain_health (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); anchor_event (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 1,887 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: 2 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 9, about 1,887 tokens to load them all
- tool set hash: da8788fde8084fe78183740e9448a5c1
- tools last changed: 2026-10-18T07:20:45.761Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.bonissystems/knox-anchor.svg)](https://protogrid.dev/servers/com.bonissystems/knox-anchor)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-18 `return_agent_trip` added
  - THE TICK. Your own door posts a returned trip: the plan, the door's record (targets and keyed commitments, never content), its head, the trip nonce and the agent's report. The trip's departure must already be sealed under the same key as agent_trip_departed. Knox checks the plan and nonce against that departure, recomputes the record's hash chain, compares plan, record and report, and seals the verdict as agent_trip_returned: one stamp on your plan. A second return of the same trip is refused as REPLAY and not sealed. Knox never holds your trip key; check the MACs yourself with verify-agent-trip.mjs. Requires a Knox Bearer API key on the Authorization header.
- 2026-10-18 `verify_agent_trip` added
  - THE TICK. Given the returned seal (64 hex) or the trip id of a customer agent trip, return what Knox sealed when the trip came back: the verdict (LINES_UP or MISMATCH), the finding classes, the door head, when it was sealed, and the Bitcoin status of its hourly batch. Public, no key. The witness is door_observed: the door ran in the agent's own process. The comparison is the agent's report against what the door recorded, not against the outside system's answer.

Full history: https://api.protogrid.dev/v1/servers/com.bonissystems%2Fknox-anchor/changes

## Remotes

- https://bonissystems.com/api/knox/mcp (streamable-http, auth none, reachable true, uptime30d 0.9655172)

## Packages

_none_

## Tools (9)

- `anchor_event`: Anchor a generic agent action to the Knox chain. Accepts any event_type from the canonical taxonomy plus a payload object. Returns the anchor sequence, payload hash, predecessor hash, timestamp, and verify URL. Requires a Knox Bearer API key on the Authorization header — unauthenticated calls are rejected. Provision a key by contacting Bonis Systems.
- `anchor_file_hash`: Anchor a SHA-256 file digest to Knox and return an affidavit architected for FRE 902(13)/(14) self-authentication. The file itself is not transmitted — the caller computes the hash and only the digest + filename + size + MIME type are anchored. Admissibility in any matter remains a determination of the presiding court. Requires a Knox Bearer API key on the Authorization header — unauthenticated calls are rejected.
- `anchor_mcp_tool_call`: Convenience anchor for the AAM Model Context Protocol theater. Records an `agent_mcp_tool_call` event with structured tool-call metadata (server URL, tool name, argument digest, asserted agent identity, response digest). The record is sealed with a commitment to the authenticated principal that made the assertion, so a reader can tell WHO claimed it. Knox does not authenticate the named agent: this makes an assertion about an agent's actions independently checkable, not the agent itself independently identified.
- `get_chain_health`: Return Knox service health: process uptime, database latency, total anchors written, latest anchor timestamp, and the Bitcoin anchor SLA target (OpenTimestamps interval, 1-6 hour confirmation window). Mirrors the public /api/knox/health endpoint under the MCP envelope.
- `get_descriptor`: Return the Knox MCP server self-description: operator, USPTO patent reference, jurisdiction, available tools, and links to the public AAM (Agent Audit and Management) documentation surface.
- `list_event_types`: Return the canonical Knox event-type taxonomy. Each event type is a citation token for federal-grade audit; the registry expands monotonically and is itself anchored on every expansion.
- `return_agent_trip`: THE TICK. Your own door posts a returned trip: the plan, the door's record (targets and keyed commitments, never content), its head, the trip nonce and the agent's report. The trip's departure must already be sealed under the same key as agent_trip_departed. Knox checks the plan and nonce against that departure, recomputes the record's hash chain, compares plan, record and report, and seals the verdict as agent_trip_returned: one stamp on your plan. A second return of the same trip is refused as REPLAY and not sealed. Knox never holds your trip key; check the MACs yourself with verify-agent-trip.mjs. Requires a Knox Bearer API key on the Authorization header.
- `verify_agent_trip`: THE TICK. Given the returned seal (64 hex) or the trip id of a customer agent trip, return what Knox sealed when the trip came back: the verdict (LINES_UP or MISMATCH), the finding classes, the door head, when it was sealed, and the Bitcoin status of its hourly batch. Public, no key. The witness is door_observed: the door ran in the agent's own process. The comparison is the agent's report against what the door recorded, not against the outside system's answer.
- `verify_anchor`: Given a SHA-256 anchor hash (64 hex chars), return the anchor record, chain link validity (predecessor present and matched), event type, sequence number, and verify URL. Public — no authentication required.
