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

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

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

## Components

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

## Channel facts

- Registry: `npm`
- Package: `@tethral/acr-mcp`
- Version: `2.14.0`
- 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**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to Tethral-Inc/AgentRegistry).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 10 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 47/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 1955 tokens (~279/item across 7 items; 7 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **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.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

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

### Codex

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

### opencode

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

### OpenClaw

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

### Hermes

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

### Other

```json
{
  "mcpServers": {
    "tethral-inc-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-02 (score 74, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-08-01 (score 59, −9)

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

### 2026-07-31 (score 68, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-27 (score 86, +27)

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

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

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 (7)

### `orient_me` (~94 tokens)

Where am I, and what should I do next? Reads your profile, coverage, and unread signals, then returns the single most useful next step for your current state (just registered / some data / steady). Call this when you're unsure where to start.

Input parameters:

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

### `get_my_agent` (~56 tokens)

Identity card for your ACR agent: agent ID, API key, dashboard link, provider class, status. Pure identity — for "what should I do next?" call `orient_me`; for behavior data call any lens tool directly.

### `log_interaction` (~1159 tokens)

Enrich your ACR interaction profile with a manually-reported receipt. Use this for signals the host-side observer cannot infer on its own — chain structure, decision tokens, substitutions, whether the result was actually used.

Primary capture is the host-side observer: install @tethral/acr-hook as a Claude Code PreToolUse/PostToolUse hook (or the equivalent for your host) and every tool call your agent makes is recorded automatically, with no LLM cooperation. The hook gives you target + status + duration; this tool is how you add the structured signals the hook can't see.

Good moments to call log_interaction:
\- A multi-step workflow you want the friction lens to analyze as a chain — pass chain_id, chain_position, preceded_by.
\- A call that replaced a failed one to a different target — pass substitution_of so the substitution-graph lens can learn the swap.
\- A call whose response you discarded — pass result_used=false to seed the wasted-attention lens.
\- Reasoning tokens spent deciding *which* target to call — pass decision_tokens.
\- A call that seemed wrong but didn't fail outright — pass anomaly_flagged=true with a content-free anomaly_detail.

If you have not installed the hook yet, this tool can also serve as the only capture path — but expect lens views to be sparse, because LLMs don't reliably self-report every call.

Classification fields (all optional, all content-free): activity_class ("language", "math", "visuals", "creative", "deterministic", "sound") and other category fields (target_type, interaction_purpose, workflow_role, workflow_phase, data_shape, criticality) describe the kind of work this call represents. Richer classification unlocks friction breakdowns by kind-of-work 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.
- `context_bytes` (integer): Context payload size in bytes shipped to the target. Enables per-target context-cost analysis.
- `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.
- `decision_tokens` (integer): Tokens spent deciding *which* target to call, separate from the target call itself. Useful for agents that run reasoning before routing.
- `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): The target_system_id of the immediately preceding call in a multi-step chain (e.g. 'api:openai.com'). Use this to link sequential calls so ACR can compute directional amplification — how much slower…
- `prompt_cache_hit_ratio` (number): Fraction of prompt cached (0..1). Pass when the provider reports it.
- `queue_wait_ms` (number): Time spent waiting in queue before execution (ms)
- `response_size_bytes` (number): Response payload size in bytes
- `result_used` (boolean): Did the agent actually use the response? Set false if the response was discarded (e.g. wrong shape, low quality). Seeds the wasted-attention lens.
- `retry_count` (number): Number of retries (0 = no retries)
- `status` (string, required): Outcome of the interaction
- `substitution_of` (string): When this call replaces a preceding failed call to a different target, pass the replaced target_system_id here (e.g. 'api:openai.com'). Seeds the substitution-graph lens.
- `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".
- `tokens_used` (integer): Total tokens used in this interaction (input + output). Optional — enables wasted-token callouts in the friction report.
- `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.

### `get_friction_report` (~272 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: chain overhead, directional amplification between targets, retry waste, population drift, and per-target bottlenecks. 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. Capture is automatic via the host-side hook (@tethral/acr-hook); the report defaults to source='all' so it reflects every captured call. Pass source='agent' for your log_interaction self-reports only, or source='server' for the MCP observer self-log only.

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
- `source` (string): Signal source. 'all' = every capture path incl. the host-side hook (default). 'agent' = your log_interaction self-reports only. 'server' = MCP observer self-log only (tool-call timing).

### `summarize_my_agent` (~98 tokens)

[DEPRECATED — call `orient_me` instead.] One-call snapshot of profile, friction, and coverage. Superseded by `orient_me`, which routes by state and surfaces the same lens summaries when the agent is steady. Will be removed in a future release.

Input parameters:

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

### `get_notifications` (~147 tokens)

An anomaly signal is a behavioral pattern ACR observed across multiple unrelated agents (not a security event). 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)
- `verbose` (boolean): Render full-length notification IDs instead of the truncated inline display. Useful when copying an ID into `acknowledge_signal`.

### `acknowledge_signal` (~129 tokens)

Acknowledge an anomaly signal notification after reviewing it with your operator. Records that the notification has been reviewed. Acknowledgements expire after 30 days. Does not remove the observation from the network — 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 signal is being acknowledged (e.g., "user reviewed and accepted risk")
- `verbose` (boolean): Render full-length notification and agent IDs instead of the truncated inline display.

## Diagnostics

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

## Score history

- 2026-08-03: 74
- 2026-08-02: 74
- 2026-08-01: 59
- 2026-07-31: 68
- 2026-07-29: 86
- 2026-07-28: 86
- 2026-07-27: 86
- 2026-07-26: 59

## 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/tethral-inc-acr/tethral-acr-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/tethral-inc-acr/tethral-acr-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/tethral-inc-acr/tethral-acr-mcp
