Back to skill

Security audit

Millimetric Mcp Setup

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward setup guide for connecting agents to Millimetric analytics, with disclosed credentialed access and no hidden execution behavior.

Use a least-privilege read-only key when possible, avoid account-wide keys unless you need multi-project access, do not commit MCP config files containing bearer tokens, and pin or isolate the optional MCP Inspector package before running it on a trusted machine.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:83
Finding
Unpinned Third-Party Package Download and Execution## Vulnerability Details **File Location**: `SKILL.md:83` **Vulnerability Type**: Unpinned third-party dependency execution **Risk Level**: Medium **Complete Code Snippet**: ```bash npx @modelcontextprotocol/inspector ``` ### Technical Analysis The documented command invokes `npx` without specifying an exact version of `@modelcontextprotocol/inspector`. If the package is not already available locally, `npx` can retrieve it from the configured package registry and immediately execute its package entry point with the invoking user's privileges. Because neither a version nor an integrity hash is pinned, the code executed by users may differ from the code that existed when this Skill was audited. This creates a supply-chain risk if the package, its maintainer account, one of its transitive dependencies, or the configured registry is compromised. It also permits unexpected behavior from an ordinary incompatible or unsafe future release. ### Attack Path 1. An attacker compromises the package, a maintainer account, a transitive dependency, or the package source used by the victim's npm configuration. 2. The attacker publishes or serves a modified release containing malicious installation or runtime code. 3. A user follows the Skill documentation and runs `npx @modelcontextprotocol/inspector`. 4. `npx` resolves and downloads the unpinned package release. 5. The downloaded package executes with the user's local account permissions. 6. Malicious code can access files, environment variables, credentials, and network resources available to that user. ### Impact Assessment Successful exploitation could provide arbitrary code execution under the invoking user's account. The accessible scope may include project files, user-readable configuration and credential files, environment variables such as `MILLIMETRIC_KEY`, and network services reachable from the host. It does not inherently grant administrator privileges, but the impact c ...[truncated 77 chars]
Remediation
## Remediation Suggestions - Pin the package to an exact reviewed version, for example: ```bash npx --yes @modelcontextprotocol/inspector@<reviewed-exact-version> ``` - Prefer installing the dependency through a project manifest and committing a lockfile with integrity metadata. - Review the pinned package and its transitive dependency tree before recommending execution. - Configure npm to use a trusted registry and retain integrity verification. - Run the inspector as an unprivileged user in an isolated environment with access only to the required files and credentials. - Avoid exposing production or account-wide keys during interactive testing; use a least-privilege read-only key where possible.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (13)

Agent Config Directory Access

High
Category
Agent Snooping
Content
### Claude Code / Claude Desktop

Edit `~/.claude/config.json` (or use the UI):

```json
{
Confidence
90% confidence
Finding
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

External Transmission

Medium
Category
Data Exfiltration
Content
---
name: millimetric-mcp-setup
description: Connect AI agents (Claude Code, Claude Desktop, Cursor, MCP Inspector, OpenClaw) to the Millimetric MCP server so they can natively call track_event, query_events, get_stats, top_sources, and compare_projects. Use when the user wants their AI to read or write Millimetric analytics directly.
metadata: { "openclaw": { "requires": { "env": ["MILLIMETRIC_KEY"], "bins": ["curl"] }, "primaryEnv": "MILLIMETRIC_KEY", "emoji": "🧠", "homepage": "https://api.millimetric.ai/mcp" } }
---

# Millimetric MCP Setup
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
---
name: millimetric-mcp-setup
description: Connect AI agents (Claude Code, Claude Desktop, Cursor, MCP Inspector, OpenClaw) to the Millimetric MCP server so they can natively call track_event, query_events, get_stats, top_sources, and compare_projects. Use when the user wants their AI to read or write Millimetric analytics directly.
metadata: { "openclaw": { "requires": { "env": ["MILLIMETRIC_KEY"], "bins": ["curl"] }, "primaryEnv": "MILLIMETRIC_KEY", "emoji": "🧠", "homepage": "https://api.millimetric.ai/mcp" } }
---

# Millimetric MCP Setup
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
---
name: millimetric-mcp-setup
description: Connect AI agents (Claude Code, Claude Desktop, Cursor, MCP Inspector, OpenClaw) to the Millimetric MCP server so they can natively call track_event, query_events, get_stats, top_sources, and compare_projects. Use when the user wants their AI to read or write Millimetric analytics directly.
metadata: { "openclaw": { "requires": { "env": ["MILLIMETRIC_KEY"], "bins": ["curl"] }, "primaryEnv": "MILLIMETRIC_KEY", "emoji": "🧠", "homepage": "https://api.millimetric.ai/mcp" } }
---

# Millimetric MCP Setup
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
{
  "mcpServers": {
    "millimetric": {
      "url": "https://api.millimetric.ai/mcp",
      "transport": "http",
      "headers": {
        "Authorization": "Bearer rk_live_…"
Confidence
85% confidence
Finding
The configuration instructs the agent client to automatically attach a bearer token to requests sent to a third-party MCP server. That is the intended integration, but it creates persistent credentialed external access from the local agent, so compromise or misuse of the client/session could expose analytics data or allow event writes depending on key scope.

External Transmission

Medium
Category
Data Exfiltration
Content
{
  "mcpServers": {
    "millimetric": {
      "url": "https://api.millimetric.ai/mcp",
      "transport": "http",
      "headers": { "Authorization": "Bearer rk_live_…" }
    }
Confidence
85% confidence
Finding
This Cursor config similarly establishes automatic authenticated communication with an external MCP server. Because the token is embedded in client configuration, any compromise of the local environment or accidental sharing of config files could leak a credential with analytics access.

Rp1

Medium
Category
MCP Rug Pull
Confidence
81% confidence
Finding
The skill instructs users to run `npx @modelcontextprotocol/inspector` without pinning a version, which causes execution of the latest package from the registry at install time. If the package, a dependency, or the publisher account is compromised, users could execute attacker-controlled code on their workstation during setup.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
npx @modelcontextprotocol/inspector
# URL:  https://api.millimetric.ai/mcp   (or http://localhost:8787/mcp for local dev)
# Header: Authorization: Bearer rk_live_…
```
Confidence
77% confidence
Finding
The inspector setup explicitly directs users to connect to an external URL with an Authorization header. This is expected for testing, but it still sends a live credential to a remote service and may expose project analytics in an interactive debugging tool.

External Transmission

Medium
Category
Data Exfiltration
Content
{
  "mcpServers": {
    "millimetric-account": {
      "url": "https://api.millimetric.ai/mcp/account",
      "transport": "http",
      "headers": { "Authorization": "Bearer ak_live_…" }
    }
Confidence
91% confidence
Finding
This configuration uses an `ak_live_…` account-wide key against `/mcp/account`, granting access across all projects visible to the account. In context this is intentional for multi-project use, but the blast radius is substantially larger than single-project read keys, so credential leakage or misuse could expose broad analytics data across an organization.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# List available tools
curl -s -X POST https://api.millimetric.ai/mcp \
  -H "Authorization: Bearer $MILLIMETRIC_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq
Confidence
88% confidence
Finding
The URL reference here is part of a concrete authenticated `curl` example that transmits a bearer token to the external API. The skill context makes this expected rather than deceptive, but it remains a genuine security-sensitive action because it sends secrets and enables access to analytics resources.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# List available tools
curl -s -X POST https://api.millimetric.ai/mcp \
  -H "Authorization: Bearer $MILLIMETRIC_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq
Confidence
88% confidence
Finding
The URL reference here is part of a concrete authenticated `curl` example that transmits a bearer token to the external API. The skill context makes this expected rather than deceptive, but it remains a genuine security-sensitive action because it sends secrets and enables access to analytics resources.

External Transmission

Medium
Category
Data Exfiltration
Content
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq

# Call top_sources directly
curl -s -X POST https://api.millimetric.ai/mcp \
  -H "Authorization: Bearer $MILLIMETRIC_KEY" \
  -H "Content-Type: application/json" \
  -d '{
Confidence
90% confidence
Finding
This URL reference is likewise embedded in a live authenticated API call that can retrieve analytics data. The behavior is intended, but the combination of outbound transmission and bearer authentication means misuse or leakage can expose sensitive operational data.

External Transmission

Medium
Category
Data Exfiltration
Content
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq

# Call top_sources directly
curl -s -X POST https://api.millimetric.ai/mcp \
  -H "Authorization: Bearer $MILLIMETRIC_KEY" \
  -H "Content-Type: application/json" \
  -d '{
Confidence
90% confidence
Finding
This URL reference is likewise embedded in a live authenticated API call that can retrieve analytics data. The behavior is intended, but the combination of outbound transmission and bearer authentication means misuse or leakage can expose sensitive operational data.

Static analysis

No suspicious patterns detected.