npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@adastracomputing/aer-mcp-recorder

v0.1.0

Published

Transparent MCP proxy that records the tool activity a coding harness drives through MCP, with no harness integration. Fail-open byte transparency and redaction by default.

Readme

@adastracomputing/aer-mcp-recorder

Record the MCP tool activity a coding harness drives, with no harness integration.

aer-mcp-recorder is a transparent MCP proxy. You drop it in front of your real MCP server and point your harness at the proxy. The proxy forwards the byte stream between the harness and the real server unchanged, parses a copy for recording and emits AER events (tool.started, tool.completed, a coverage report). The harness (Claude Code, Cursor, Cline, Codex, custom stacks) needs no AER code. If it speaks MCP, its MCP tool calls are recorded.

This is the observation half. It is separate from @adastracomputing/aer-mcp-guard, which is the admission half (deny or allow). The recorder observes and emits, the guard denies and allows, and the two can run side by side.

Two properties this package is designed for

Fail-open byte transparency. The proxy forwards the raw byte streams unchanged and records from a copy. If the recording path throws, is misconfigured or the AER sink is unreachable, the proxy still forwards the stream unchanged and the child's behavior and exit code are unaffected. Recording is strictly best-effort and never in the critical path. Your tools never break because you wrapped them.

Redaction by default. By default the recorder captures tool names, argument key names (not values), the result error flag and result size, plus timing. It never captures argument values or result content unless you explicitly opt in.

Install

npm i -g @adastracomputing/aer-mcp-recorder

Claude Code config

Wrap your real MCP server command. In your MCP config, replace the server's command with aer-mcp-recorder and pass the real command after --:

{
  "mcpServers": {
    "my-tools": {
      "command": "aer-mcp-recorder",
      "args": ["--", "your-mcp-server", "--flag"]
    }
  }
}

That is the whole change. The harness talks to the recorder, the recorder talks to your-mcp-server and AER sees the tool calls.

Configuration

All configuration is by environment variable. Without AER_API_KEY, AER_TENANT_ID and AER_AGENT_ID the proxy records nothing and simply forwards bytes.

| Variable | Purpose | | --- | --- | | AER_API_KEY | Tenant API key. Required to record. | | AER_TENANT_ID | Tenant id. Required to record. | | AER_AGENT_ID | Agent id. Required to record. | | AER_ENV_ID | Environment id. Optional. | | AER_AGENT_VERSION | Agent version string. Optional. | | AER_BASE_URL | API base URL. Default https://api.aer.run. | | AER_PRINCIPAL_ID | Human, service or CI identity the run is on behalf of. Optional. | | AER_PRINCIPAL_KIND | user, service or ci. Optional. | | AER_PRINCIPAL_DISPLAY | Short label for feeds. Optional. | | AER_MCP_RECORD_ARGS | Set to 1 to also capture argument values. Off by default. | | AER_MCP_RECORD_RESULTS | Set to 1 to also capture result content. Off by default. |

What it records

By default each MCP tool call produces two events. The default tool.started payload is:

{ "tool": "search", "arg_keys": ["query", "limit"] }

and the default tool.completed payload is:

{ "tool": "search", "ok": true, "is_error": false, "duration_ms": 42, "result_size": 318 }

No argument values and no result content appear unless you opt in with AER_MCP_RECORD_ARGS=1 or AER_MCP_RECORD_RESULTS=1. On close the recorder emits a mcp.recorder.report coverage event carrying the recorder version, the server name and version, the tools it saw, plus call and error counts.

Caveat

This records only MCP-mediated activity. It does not see harness-native file edits, shell commands or model calls that do not go through this MCP server. It is one capture surface among several. AER records activity visible through configured integration surfaces, not everything an agent does.

Composition with the guard

The recorder and the guard sit in the same position in front of an MCP server. They are separate packages you can run independently: the recorder observes and emits, the guard admits and denies.

License

Apache-2.0