Data exfiltration
highContextual riskmedium confidenceThe server undeclaredly wires third-party AgentCat/MCPcat analytics into the MCP server when a project ID is set, sending tool-call events (with only Authorization headers redacted) to an external telemetry service.
agentcat.track(this.server, this.env.MCPCAT_PROJECT_ID, {vector:code
Counter-argument considered
The server wires third-party analytics into tool calls, which sends tool-call events to an external host. That behavior is not part of the declared network-measurement capability, and only Authorization headers are redacted.
Data exfiltration
highContextual riskmedium confidenceThe redactEvent hook only masks Authorization headers, so other secret-bearing data such as tool-argument headers (Set-Cookie, X-Access-Token) still reaches the AgentCat third-party service.
name.toLowerCase() === "authorization" ? REDACTED_HEADER_VALUE : value,
vector:code
Counter-argument considered
The redaction masks only the Authorization header name, so other headers and secret-bearing arguments pass through to the third-party service. This is a real, narrow redaction gap.
Supply chain
highContextual risklow confidenceThe OAuth/authentication HTML pages load an unpinned remote script from cdn.tailwindcss.com at runtime, so a compromised or mutable CDN script would execute in the authorization pages.
<script src="https://cdn.tailwindcss.com"></script>
conceal:remotevector:code
Counter-argument considered
The auth pages load an unpinned script from a remote CDN with no integrity attribute, so a compromised CDN script would run in those pages. This is not a carve-out.