Atlas / MCP servers / newrelic-experimental / preflight

preflightBLOCK

mcp/newrelic-experimental/preflight

Observability for AI coding assistants — cost tracking, efficiency scoring, and anti-pattern detection for Claude Code, Cursor, Copilot, and more. Local-first; New Relic optional.

Verdict
BLOCK
Grade
F
Trust score
48 /100
Exposed tools
55 48r · 5w · 2d
Transport
stdio
License
Apache-2.0
Stars
52
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Preflight Observability for AI Coding Assistants

[](LICENSE) [](.nvmrc) [](#quick-start) [](#dashboards)

**Docs** • **What's New** • Examples • **Community** • Contributing

Why Your AI Tool Needs Observability

Your AI coding assistant makes hundreds of decisions every session — what to read, what to edit, when to run commands. But you can't see any of it. You know it was fast, but was it efficient? You got a PR merged, but how much did it cost? You fixed a bug, but did it get stuck in a loop first?

Preflight is observability for agentic coding — the actions, cost, and efficiency of your AI coding assistant as it works. See exactly what's happening, how much it costs, and where your AI is wasting time.

Local-first by design. Preflight runs entirely on your machine and sends your data nowhere by default. A live dashboard at localhost:7777 shows your sessions in real time, fully offline. Connect a New Relic account only when you want more — team rollups, alerting, and cross-session history. You choose: local-only, New Relic, or both.

Demo

See cost breakdown, efficiency scoring, anti-patterns, and live session tracking in action.

What You Get

Visibility

  • Every action captured — file reads, edits, commands, searche
Read from source at commit 18f01b0ede1aOBSERVED · 2026-10-08
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add preflight --env NEW_RELIC_LICENSE_KEY=${NEW_RELIC_LICENSE_KEY} -- npx -y @newrelic/[email protected]
03

Exposed tools (55)

48 read · 5 write · 2 destructive. Blast radius: 2 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
deep-researchreadFan-out web research workflow
live-demoreadx
live-fix-demoreadx
nr_observe_get_anti_patternsreadGet detected anti-patterns (thrashing, re-reading, stuck loops, blind editing, over-delegation) for the most recent task.
nr_observe_get_api_failuresreadGet API failure tracking: per-model reliability scorecards, tokens lost, cost impact, throttle alerts, and mean time to recovery. Failures are captured via Claude Code
nr_observe_get_budget_statusreadGet current AI spend vs. configured budget caps (session, daily, weekly). Returns remaining budget, % used, and any threshold alerts fired this session.
nr_observe_get_claudemd_impactreadGet the impact report for the most recent change to the project
nr_observe_get_collaboration_profilereadGet a developer
nr_observe_get_compute_wastereadGet compute waste summary: total tokens wasted on retried tool calls and anti-pattern activity (stuck loops, redundant reads, thrashing). Includes per-pattern breakdown and a status assessment (clean / moderate / needs_attention).
nr_observe_get_configreadShow the current server configuration (sensitive fields masked): mode, developer, account, region, storage path, dashboard URL, and config file location. Use to diagnose misconfiguration without exposing credentials.
nr_observe_get_context_compositionreadGet per-turn token breakdown by category (system prompt, conversation history, tool results, injected files). Shows context window fill percentage and dominance alerts. LIMITATION: system_prompt and injected_file_content are always 0 -- the model API
nr_observe_get_context_efficiencyreadGet context window efficiency metrics: unique vs. repeated file reads, repeated-read ratio, and top re-read files. A high ratio suggests the model is losing context.
nr_observe_get_context_trackingreadGet context window tracking: per-turn token growth, category breakdown (System/Tools/User/Assistant), fill percentage, and per-tool output contribution. Shows which tools consume the most context.
nr_observe_get_cost_breakdownreadGet a breakdown of session costs by task, model, and efficiency metrics like cost per line of code. Cost figures are Preflight
nr_observe_get_cost_forecastreadProject AI spending forward based on current session rate. Returns forecast cost for end-of-day, end-of-week, and end-of-session (8h), with a confidence note.
nr_observe_get_cost_per_outcomereadGet cost breakdown by outcome type (bug fix, feature, refactor, etc.) with waste ratio and ROI estimate.
nr_observe_get_cost_per_toolreadCost attribution per tool type — approximate, based on turn-level token correlation. Shows which tools cost the most and average cost per call. Also breaks Skill calls down per skill in costBySkill (calls, estimated cost and tokens, total duration).
nr_observe_get_decision_treereadGet decision branch analysis: reasoning and action extraction per turn for triggered branches (recovery, retry, delegation), with outcome tagging. Includes post-mortem of failure chains and longest failure streak. LIMITATION: the reasoning field is the model
nr_observe_get_efficiency_scorereadGet the AI coding efficiency score for the most recent task or the session-wide rolling average.
nr_observe_get_git_efficiencydestructiveGet Git workflow efficiency metrics: merge conflicts, aborted operations, force pushes, stale branch detection, and actionable suggestions to reduce Git friction.
nr_observe_get_instruction_driftreadGet instruction/prompt drift analysis: tracks how the project
nr_observe_get_latency_decompositionreadGet latency decomposition: how much time is spent in LLM API calls vs tool execution vs overhead, with p50/p95 percentiles for each component.
nr_observe_get_latency_percentilesreadGet p50/p95/p99 latency percentiles for tool calls, broken down by tool type. Use to identify which tools are slowest in the current session.
nr_observe_get_model_recommendationreadGet a data-driven model recommendation ranked by historical efficiency score, cost, and task success rate across past sessions, both overall and broken down by task outcome type (bug_fix, feature, refactor, investigation, configuration, documentation, failed_attempt).
nr_observe_get_personal_insightsreadReturns a narrative coaching report comparing this week
nr_observe_get_platform_comparisonreadCompare AI coding assistant platforms side-by-side on a given metric: efficiency, cost, task_success, tool_calls, or error_rate.
nr_observe_get_prompt_cache_healthreadGet prompt cache health: hit rate, savings, and a concrete recommendation for improving cache efficiency.
nr_observe_get_quality_proxywriteGet quality proxy metrics: diff apply rate, test pass rate, backtrack count, self-correction count, and degradation detection over the session lifetime.
nr_observe_get_recommendationsreadGet personalized optimization recommendations covering cost, efficiency, prompt engineering, CLAUDE.md impact, and model selection.
nr_observe_get_retry_alertsreadGet thrashing/retry detection alerts: repeated failures or highly similar inputs within a sliding window. Identifies when the agent is stuck in a loop.
nr_observe_get_session_historyreadGet a list of past sessions with summary metrics (efficiency, cost, tool calls, outcome).
nr_observe_get_session_statsreadGet current session observability metrics: tool call counts, success rates, file access stats, and duration summaries.
nr_observe_get_session_timelinereadGet an ordered list of recent tool calls with timestamps, names, durations, and success/failure status.
nr_observe_get_task_completion_ratereadGet task lifecycle metrics: completed task count, average task duration, and average tool calls per task.
nr_observe_get_team_summaryreadGet aggregated AI coding cost and efficiency metrics for all developers in the configured team, queried via New Relic NRQL. Requires teamId to be set in config.
nr_observe_get_tool_selection_scorereadGet tool selection quality score: evaluates efficiency of tool usage by detecting redundant reads, repeated failures, and unused large outputs. Score 0-1 where 1 is perfect.
nr_observe_get_trendsreadGet trend data for a metric over time: weekly efficiency, cost, task success rate, or tool call counts.
nr_observe_get_turn_analysisreadConversation turn analysis — groups tool calls by AI response, shows parallelism and turn patterns.
nr_observe_get_weekly_summaryreadGet a weekly summary report with per-developer breakdown, cost, efficiency, and anti-pattern counts.
nr_observe_get_workflow_tracereadGet the complete tool call trace for a task, including sequence, duration, and anti-pattern/efficiency analysis.
nr_observe_healthreadCheck server health: version, uptime, session ID, and connection timestamp. Also reports whether telemetry event sends are succeeding. Use when the MCP connection feels stale or tools are behaving unexpectedly.
nr_observe_install_hookswriteInstall PreToolUse, PostToolUse, PermissionRequest, and PermissionDenied monitoring hooks into ~/.claude/settings.json.
nr_observe_mark_task_boundaryreadExplicitly mark the end of the current task (a discrete unit of work between user
nr_observe_report_feedbackreadRecord user quality feedback for a task. Helps correlate efficiency metrics with perceived quality.
nr_observe_report_session_endreadReport that the current AI coding session has ended. Call this at the end of a session
nr_observe_report_session_startwriteReport that a new AI coding session has begun. Call this at the start of a session
nr_observe_report_tokenswriteReport token usage for cost tracking. Call periodically to enable accurate cost metrics.
nr_observe_report_tool_callreadReport a tool call event for observability. Use this to report non-MCP tool calls
nr_observe_send_digestwriteGenerate the current weekly AI coding summary and POST it to the configured Slack webhook immediately.
nr_observe_subscribe_digestreadRegister a Slack webhook URL to receive weekly AI coding cost and efficiency summaries.
nr_observe_unsubscribe_digestdestructiveRemove the registered Slack webhook for weekly digests.
samplereadshort
tool_areadA
tool_breadB
tool_creadC
04

Trust audit

BLOCKgrade F · trust 48/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (4 observation(s))
Network
declared (5 observation(s))
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/platforms/amazon-q-adapter.ts:101
'   (typically ~/.aws/amazonq/mcp.json or project-level .amazonq/mcp.json)',
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/platforms/amazon-q-adapter.ts:115
'   file (~/.aws/amazonq/cli-agents/<agent-name>.json for a global',
Why it matters. touches a credential store
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.claude/skills/verify-preflight/SKILL.md:30
$PF up                           # prints: up pid=<pid> url=http://127.0.0.1:7791 run=<run dir>
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.claude/skills/verify-preflight/scripts/pf-verify:12
URL="http://127.0.0.1:$PORT"
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
src/transport/nr-ingest.test.ts:2676
agent_description: 'Use api key sk-ant-api03-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
src/transport/nr-ingest.test.ts:3220
const SECRET = 'sk-ant-api03-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
src/config.test.ts:747
const input = 'db: mongodb+srv://admin:[email protected]/db';
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
src/config.test.ts:753
const input = 'db: mysql://root:rootpass@localhost/db';
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
src/server.integration.test.ts:281
const fullDbUrl = 'postgres://user:[email protected]:5432/mydb';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/hooks/collector-script.test.ts:1907
const token = 'ghs_16C7e42F292c6912E7710c838347Ae178B4a';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/server.integration.test.ts:208
{ token: 'ghp_abcd1234efgh5678ijkl9012mnop3456qrst', name: 'GitHub PAT' },
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/server.integration.test.ts:209
{ token: 'sk_live_abcd1234567890abcdefghijkl', name: 'Stripe live key' },
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/server.integration.test.ts:210
{ token: 'pypi-AgEIcHlwaS5vcmc123456789abcdefghijklmnopq', name: 'PyPI token' },
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/server.integration.test.ts:211
{ token: 'hf_abcdefghijklmnopqrstuvwxyzABCDEFG', name: 'Hugging Face token' },
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
src/config.test.ts:680
const input = 'token: ghs_16c7e42f292c6912191abc123def456';
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
src/config.test.ts:682
expect(result).not.toContain('ghs_16c7e42f292c6912191abc123def456');
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
src/hooks/collector-script.test.ts:1903
expect(redact('ghp_1234567890abcdef01234567890abcdef01')).toBe('[REDACTED]');
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
src/hooks/collector-script.test.ts:1907
const token = 'ghs_16C7e42F292c6912E7710c838347Ae178B4a';
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
src/metrics/git-efficiency-tracker.test.ts:1742
'git push https://x-access-token:[email protected]/a/b.git',
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
src/config.test.ts:790
'data -----BEGIN RSA PRIVATE KEY-----\nMIIE...base64...\n-----END RSA PRIVATE KEY----- end';
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
src/config.test.ts:949
const input = '-----BEGIN RSA PRIVATE KEY-----' + 'A'.repeat(200);
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
src/hooks/collector-script.test.ts:1969
const input = '-----BEGIN RSA PRIVATE KEY-----' + 'B'.repeat(200);
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
src/config.test.ts:922
'xoxa-123-456-789-abc',
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
src/config.test.ts:923
'xoxb-123-456-789-abc',
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
src/config.test.ts:924
'xoxp-123-456-789-abc',

Gates applied: no_behavioural_pass.

Audited 2026-10-08 · audit v0.4.1 · source sha 18f01b0ede1afull audit observations/trust-audit/mcp-server/newrelic-experimental__preflight.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-0818f01b0ede1aBLOCKF48first audit
06

Questions

What is the preflight MCP server?

Observability for AI coding assistants — cost tracking, efficiency scoring, and anti-pattern detection for Claude Code, Cursor, Copilot, and more. Local-first; New Relic optional.

What tools does preflight expose?

55 in total: 48 read-only, 5 that write, and 2 that can delete or overwrite (nr_observe_get_git_efficiency, nr_observe_unsubscribe_digest). Every one is listed on this page with its risk.

Is preflight safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (48/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 2 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does preflight need?

It reads NEW_RELIC_AI_HOMELAB_TOKEN, NEW_RELIC_API_KEY and NEW_RELIC_LICENSE_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does preflight run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as preflight-docs at 0.0.1.

How current is this page?

The grade is for one exact copy of the source (18f01b0ede1a), read on 2026-10-08. The repository is watched and re-audited when it changes.

Advertisement