# ACR — Agent Composition Records (npm · @tethral/acr-mcp)

Interaction profile registry for AI agents. Log interactions, query behavioral lenses.

- Trust score: 64/100 (medium)
- Change this week: −6
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@tethral/acr-mcp`: 64/100 (this document), [markdown](https://verifymcp.io/servers/tethralai-acr/tethral-acr-mcp.md), [page](https://verifymcp.io/servers/tethralai-acr/tethral-acr-mcp)

## Channel facts

- Registry: `npm`
- Package: `@tethral/acr-mcp`
- Version: `2.1.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - No production dependencies, so there is no dependency health to assess.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 11 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 34/100
  - AI-judged instruction clarity (poor).
  - Context-footprint check failed: tool/resource definitions use about 3112 tokens (~148/item across 21 items; 21 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add tethralai-acr -- npx -y @tethral/acr-mcp
```

### Codex

```bash
codex mcp add tethralai-acr -- npx -y @tethral/acr-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "tethralai-acr": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@tethral/acr-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add tethralai-acr --command npx --arg -y --arg @tethral/acr-mcp
```

### Hermes

```yaml
mcp_servers:
  tethralai-acr:
    command: "npx"
    args: ["-y", "@tethral/acr-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "tethralai-acr": {
      "command": "npx",
      "args": [
        "-y",
        "@tethral/acr-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 64, +3)

- [functional improvement] Stability: unverified → 0.23

### 2026-08-02 (score 61, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-07-31 (score 46, −6)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-28 (score 52, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-27 (score 70, +23)

- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: poor
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 100

### 2026-07-26 (score 47)

First indexed and scored.

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

## MCP tools (21)

### `register_agent` (~311 tokens)

Register an agent with the ACR network. Optional — agents are auto-registered on first tool call. ACR collects interaction metadata (target names, timing, status) to build your interaction profile — queryable through behavioral lenses (friction and more) — and to propagate anomaly signal notifications. No request/response content is collected. We do not track the agent owner. Terms: https://acr.nfkey.ai/terms

Input parameters:

- `api_components` (array): External APIs the agent calls. Each can declare sub_components (endpoints, sub-APIs).
- `mcp_components` (array): Rich nested MCP composition. Each MCP can declare sub_components (exposed tools).
- `name` (string): Human-readable name for this agent (e.g. "my-dev-assistant"). Auto-generated if omitted.
- `operational_domain` (string): What domain this agent operates in
- `provider_class` (string, required): Agent provider/framework
- `public_key` (string, required): Agent public key or unique identifier (min 32 chars)
- `skill_components` (array): Rich nested skill composition. Each skill can declare sub_components (sub-scripts, sub-tools) so ACR can distinguish internal from external friction.
- `skill_hashes` (array): SHA-256 hashes of installed SKILL.md files (flat legacy format)
- `skills` (array): List of installed skill names (flat legacy format)
- `tool_components` (array): Tools the agent has bound. Each can declare sub_components.

### `log_interaction` (~803 tokens)

Log an interaction to populate your ACR interaction profile. You MUST call this after EVERY external tool call, API request, or MCP server interaction you make. Every lens on your profile (friction, and more to come) depends on these signals — without logging, the lenses return nothing.

How to use: After each external call completes, call log_interaction with the target (e.g. "mcp:github", "api:stripe.com"), the category, the outcome status, and how long it took. If something seemed off, set anomaly_flagged to true — anomaly signals feed both your own lens views and the network's anomaly signal notifications.

For multi-step workflows, use chain_id, chain_position, and preceded_by to link sequential calls so the friction lens can analyze chain overhead and directional friction between targets.

Classification fields (all optional, all content-free): set activity_class ("language", "math", "visuals", "creative", "deterministic", "sound") and other category fields (target_type, interaction_purpose, workflow_role, workflow_phase, data_shape, criticality) to describe the kind of work this call represents. Richer classification unlocks friction breakdowns by kind-of-work, which matters as agents specialize.

ACR collects interaction metadata only (target names, timing, status, descriptive classifications). No request/response content is collected. We do not track the agent's owner. Terms: https://acr.nfkey.ai/terms

Input parameters:

- `activity_class` (string): Kind of work the call represents. Examples: language, math, visuals, creative, deterministic, sound. Expandable — add new values as they emerge.
- `agent_id` (string): Your ACR agent ID (auto-assigned if omitted)
- `anomaly_detail` (string): What seemed wrong. DO NOT include credentials or API keys.
- `anomaly_flagged` (boolean): Set true if something seemed wrong (unexpected behavior, suspicious output, excessive latency)
- `category` (string, required): Interaction category. Use "tool_call" for MCP tool calls and API requests.
- `chain_id` (string): ID linking sequential calls in a chain. Same chain_id for all calls in a multi-step workflow.
- `chain_position` (number): Position in chain (0-indexed). First call = 0, second = 1.
- `criticality` (string): How essential this call was to the workflow. Examples: core, enrichment, debug.
- `data_shape` (string): Content-free description of what kind of data moved. Examples: tabular, text, binary, structured_json, stream, image, audio.
- `duration_ms` (number): Duration in ms (0 if unknown)
- `error_code` (string): Error code if failed (e.g., "429", "TIMEOUT", "ECONNREFUSED")
- `interaction_purpose` (string): What the agent was trying to accomplish. Examples: read, write, search, generate, transform, acknowledge.
- `preceded_by` (string): target_system_id of the call that immediately preceded this one.
- `queue_wait_ms` (number): Time spent waiting in queue before execution (ms)
- `response_size_bytes` (number): Response payload size in bytes
- `retry_count` (number): Number of retries (0 = no retries)
- `status` (string, required): Outcome of the interaction
- `target_system_id` (string, required): Target in type:name format (e.g., mcp:github, api:stripe.com, mcp:filesystem)
- `target_type` (string): More granular target type, e.g. "api.llm_provider", "api.payment", "mcp.database".
- `workflow_phase` (string): If the agent runs in phases. Examples: plan, act, reflect.
- `workflow_role` (string): Where this call sits in the broader workflow. Examples: initial, intermediate, recovery, cleanup.

### `check_entity` (~134 tokens)

Ask the ACR network what it knows about a specific skill hash, agent, or system. Returns the raw behavioral signals ACR has observed: interaction counts, failure and anomaly rates, agent adoption counts, and related metadata. This is NOT a security check — ACR does not evaluate, score, or test. It only records what has been observed and surfaces the raw counts. Read-only lookup; no data is sent to ACR.

Input parameters:

- `entity_id` (string, required): The entity identifier: skill SHA-256 hash, agent_id, or system_id
- `entity_type` (string, required): Type of entity to look up

### `check_environment` (~60 tokens)

Check the current ACR network environment: active anomaly signals and network-level observation data. Call on startup to see the state of the broader network. Remember to call log_interaction after every external call so your interaction profile stays current — every lens depends on it.

### `get_friction_report` (~186 tokens)

Query the friction lens of your interaction profile — one of several lenses available (more on the roadmap). The friction lens surfaces where time and tokens are being lost: bottleneck targets, chain overhead, retry waste, directional friction between targets, and how you compare to the population baseline. Friction is a continuum, not a verdict — high friction could be infrastructure, a hard task, or a component with elevated anomaly signals. Use it together with anomaly signal notifications to interpret correctly. Data comes from log_interaction — if the report is empty, you need to start logging your external calls.

Input parameters:

- `agent_id` (string): Your ACR agent ID (auto-assigned if omitted)
- `agent_name` (string): Your agent name (alternative to agent_id). Use this if you know your name but not your ID.
- `scope` (string): Time window for the report

### `get_my_agent` (~37 tokens)

Get your agent profile — name, ID, provider, status, and registration date. Zero-config: uses the auto-assigned agent identity.

### `get_interaction_log` (~214 tokens)

View your interaction history. Use mode "list" for a scannable log, or "detail" (or provide receipt_id) for a full technical readout of a single interaction with network context.

Input parameters:

- `agent_id` (string): Your ACR agent ID
- `agent_name` (string): Your agent name (alternative to agent_id)
- `anomaly_only` (boolean): Show only anomaly-flagged interactions
- `category` (string): Filter by category (tool_call, delegation, etc.)
- `limit` (number): Max interactions to show
- `mode` (string): Display mode: "list" for scannable log, "detail" for full readout
- `receipt_id` (string): Specific receipt ID for detail view
- `since` (string): Show interactions after this ISO timestamp
- `status` (string): Filter by status (success, failure, timeout, partial)
- `target` (string): Filter by target system (e.g. "mcp:github")

### `get_network_status` (~58 tokens)

Network-wide observation dashboard. Shows agent and system totals, system signal rates sorted worst-first, skills with elevated anomaly signals, and recent cross-agent escalations. Use this to see the state of the broader ACR network beyond just your own profile.

### `get_skill_tracker` (~104 tokens)

Track skill adoption and anomaly signal rates across the agent population. Use without skill_hash for an overview, or with skill_hash for a deep-dive with provider breakdown and cross-provider anomaly data.

Input parameters:

- `limit` (number): Max skills to show
- `min_anomaly_signals` (number): Only show skills with at least this many anomaly signals
- `skill_hash` (string): Specific skill hash for deep-dive view
- `sort` (string): Sort field

### `search_skills` (~165 tokens)

Search ACR network knowledge about a skill by name, description, or capability. Returns raw signals observed by the network: adoption counts, anomaly signal counts, version info. Not a catalog or a verdict — ACR records what has been observed about skills that exist in public registries. Read-only.

Input parameters:

- `category` (string): Filter by category
- `limit` (number): Max results to return
- `min_agents` (number): Only return skills observed being used by at least N agents
- `min_anomaly_signals` (number): Only return skills with at least N observed anomaly signals
- `query` (string, required): Search text (skill name, keyword, or capability)
- `source` (string): Filter by source (clawhub, github, npm)

### `get_skill_versions` (~55 tokens)

Get version history for a skill. Shows how it has changed over time, whether your version is current, and how many versions behind you are.

Input parameters:

- `skill_hash` (string, required): The skill hash to look up version history for

### `update_composition` (~110 tokens)

Update your agent composition without re-registering. Use this after installing, loading, or removing skills/MCPs/tools to keep your composition current. Preserves your agent identity. Supports both flat legacy fields and rich nested components with sub-components — when sub-components are provided, ACR can see internal interactions (your model engaging its own parts) separately from external interactions.

Input parameters:

- `agent_id` (string): Your agent ID (uses current session agent if omitted)
- `composition` (object, required): Your current composition

### `get_notifications` (~97 tokens)

Check for unread anomaly signal notifications about components in your composition. If ACR has observed anomaly signals affecting a skill, MCP, or system you use, it will have sent a notification here. Also delivers version updates. Call this on startup. ACR is a registry and notification layer, not a security check — notifications reflect what the network observed, not a verdict.

Input parameters:

- `agent_id` (string): Your agent ID (uses session if omitted)

### `acknowledge_threat` (~115 tokens)

Acknowledge an anomaly signal notification after reviewing it with your operator. This records that the notification has been reviewed. Acknowledgements expire after 30 days. Note: acknowledging does not remove the observation from the network — it only records that you have reviewed the signal.

Input parameters:

- `agent_id` (string): Your agent ID (uses session if omitted)
- `notification_id` (string, required): The notification ID to acknowledge
- `reason` (string): Why the threat is being acknowledged (e.g., "user reviewed and accepted risk")

### `configure_deep_composition` (~106 tokens)

Operator privacy control. Enable or disable deep composition capture for this session. When enabled (default), ACR sees the internals of your attached skills and MCPs so it can distinguish internal friction from external friction. When disabled, only top-level component info is sent — ACR no longer sees sub-components. Also settable at startup via the ACR_DEEP_COMPOSITION environment variable.

Input parameters:

- `enabled` (boolean, required): Set to true to enable deep capture, false to disable.

### `get_profile` (~97 tokens)

Your interaction profile: identity, composition summary, composition delta (MCP-observed vs agent-reported), receipt counts, target counts, and days active. This is the foundation view — other lenses (friction, coverage, trend) build on top of these counts.

Input parameters:

- `agent_id` (string): Your ACR agent ID (auto-assigned if omitted)
- `agent_name` (string): Your agent name (alternative to agent_id)

### `get_coverage` (~92 tokens)

Signal coverage: which fields you populate on your receipts and which you don't. Shows transparent rules with their conditions, observed inputs, and whether they triggered. Use this to see if your logging is complete enough for the other lenses to be useful.

Input parameters:

- `agent_id` (string): Your ACR agent ID (auto-assigned if omitted)
- `agent_name` (string): Your agent name (alternative to agent_id)

### `get_stable_corridors` (~102 tokens)

Stable corridors: interaction paths that are consistently reliable — zero failures, low latency variance, sufficient sample count. The filter thresholds are disclosed in the response so you can see exactly what qualifies. Useful for identifying which targets you can rely on.

Input parameters:

- `agent_id` (string): Your ACR agent ID (auto-assigned if omitted)
- `agent_name` (string): Your agent name (alternative to agent_id)
- `scope` (string): Time window

### `get_failure_registry` (~85 tokens)

Failure registry: per-target breakdown of failures — status codes, error codes, categories, and median duration when failed. Shows where your interactions are failing and how.

Input parameters:

- `agent_id` (string): Your ACR agent ID (auto-assigned if omitted)
- `agent_name` (string): Your agent name (alternative to agent_id)
- `scope` (string): Time window

### `get_trend` (~98 tokens)

Trend: per-target latency and failure rate changes over time. Compares current period to previous period and shows raw deltas — no synthetic direction labels. You see the numbers and decide what matters.

Input parameters:

- `agent_id` (string): Your ACR agent ID (auto-assigned if omitted)
- `agent_name` (string): Your agent name (alternative to agent_id)
- `scope` (string): Time window (compares current to previous)

### `summarize_my_agent` (~83 tokens)

Single-read overview of your interaction profile across all available lenses. Fetches profile, friction summary, and coverage in one call. Use this for a quick status check instead of calling each lens individually.

Input parameters:

- `agent_id` (string): Your ACR agent ID (auto-assigned if omitted)
- `agent_name` (string): Your agent name (alternative to agent_id)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/tethralai-acr/tethral-acr-mcp#diagnostics

## Score history

- 2026-08-03: 64
- 2026-08-02: 61
- 2026-08-01: 46
- 2026-07-31: 46
- 2026-07-30: 52
- 2026-07-28: 52
- 2026-07-27: 70
- 2026-07-26: 47

## Links

- npm package: https://www.npmjs.com/package/@tethral/acr-mcp
- Socket report: https://socket.dev/npm/package/@tethral/acr-mcp
- Repository: https://github.com/Tethral-Inc/AgentRegistry
- Website: https://acr.nfkey.ai/
- Changelog RSS feed: https://verifymcp.io/servers/tethralai-acr/tethral-acr-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/tethralai-acr/tethral-acr-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/tethralai-acr/tethral-acr-mcp
