AI Slop Code Risk Monitor

modelcontextprotocol/inspector

SlopCodeMonitor badge for modelcontextprotocol/inspector Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Deterministic testing tools for MCP servers

1.7 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for modelcontextprotocol/inspector, a TypeScript project with 11,200 GitHub stars. SynthScan examined 432,406 lines of code across 1525 source files, recording 695 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 1.7 (Low pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

1.7
Adjusted Signal
1.7
Raw Pattern Score
100%
Time Factor
2026-10-29
Last Push
11.2K
Stars
TypeScript
Language
432.4K
Lines of Code
1.5K
Files
695
Pattern Hits
2026-10-31
Scan Date
0.01
HC Hit Rate

Risk Review · Payload v1

Use each vector to guide manual verification of the underlying findings.

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 7.7/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 676 finding(s).

Hallucinated Dependency & Supply Chain Risk 0.6/100 · LOW

Are imports declared and package/API names verified? 18 finding(s).

Agent Over-Engineering Ratio 3.4/100 · LOW

Are wrappers, guards, and repeated structures necessary? 288 finding(s).

PR Review Velocity Impact 8.4/100 · LOW

Which changes need focused human review? 695 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 8MEDIUM 12LOW 675

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 695 distinct pattern matches across 10 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Over-Commented Block376 hits · 368 pts
SeverityFileLineSnippetContext
LOWtsconfig.lint.json1{COMMENT
LOWeslint.config.js1import js from "@eslint/js";COMMENT
LOWeslint.config.js21// re-sync #1955 fixed sat here unreported while the identical shape was anCOMMENT
LOWclients/launcher/tsconfig.test.json1{COMMENT
LOWclients/tui/tsdown.config.ts1import { defineConfig } from "tsdown";COMMENT
LOWclients/tui/tsdown.config.ts21// mounts. That is the reported crash, and inlining them is its fix.COMMENT
LOWclients/tui/tsdown.config.ts41 // `react` is deliberately external — the single instance every inlinedCOMMENT
LOWclients/tui/tsdown.config.ts61 "@modelcontextprotocol/core",COMMENT
LOWclients/tui/tsdown.config.ts81 // reached by a manifest edit rather than an omission.COMMENT
LOWclients/tui/vitest.config.ts21 // here waits on a React commit under v8 instrumentation — the shape behindCOMMENT
LOWclients/tui/__tests__/setup.ts1// Shared vitest setup for the TUI renderer tests.COMMENT
LOWclients/tui/__tests__/SkillsTab.test.tsx761 //COMMENT
LOWclients/tui/__tests__/helpers/renderTui.tsx1// A drop-in replacement for ink-testing-library's `render` that strips ANSICOMMENT
LOWclients/tui/src/utils/clipboard.ts1// Getting a value out of the TUI and onto the user's clipboard (#2421).COMMENT
LOWclients/tui/src/utils/schemaToForm.ts421 type: "select",COMMENT
LOWclients/web/tsdown.runner.config.ts41 // actually reaches it is a function of what `core/` imports, not of thisCOMMENT
LOWclients/web/vite.config.ts41// misclassification trap where a file's environment depended on whetherCOMMENT
LOWclients/web/vite.config.ts61//COMMENT
LOWclients/web/vite.config.ts101export default defineConfig(({ command }) => {COMMENT
LOWclients/web/vite.config.ts121 // (`core/mcp/remote/node/server.ts`), so Vite's config bundler (Rolldown)COMMENT
LOWclients/web/vite.config.ts141 // Browser code reaches the node-side stack via the Hono plugin only.COMMENT
LOWclients/web/vite.config.ts161 find,COMMENT
LOWclients/web/vite.config.ts181 // picking a different port (which would leave `allowedOrigins` wrong).COMMENT
LOWclients/web/vite.config.ts241 "src/components/**/types.ts",COMMENT
LOWclients/web/vite.config.ts301 // reach core/, which leaves core/'s own bare imports with nothing toCOMMENT
LOWclients/web/vite.config.ts321 // `AsyncTaskManager destroyed` output. The component tests only assertCOMMENT
LOWclients/web/vite.config.ts341 // Integration tests run in the integration project below (node env).COMMENT
LOWclients/web/vite.config.ts381 // Same keychain guard as the unit project: never let a test thatCOMMENT
LOWclients/web/vite.config.ts421 storybookTest({COMMENT
LOWclients/web/vite.config.ts461 },COMMENT
LOWclients/web/server/web-server-config.ts541 // host, an explicit `:80` — match the canonical `Origin` the browser sendsCOMMENT
LOWclients/web/server/vite-base-config.ts21 "atomically",COMMENT
LOWclients/web/server/vite-base-config.ts41 // it is CJS with a `graceful-fs`/`signal-exit`/`retry` graph that Vite'sCOMMENT
LOWclients/web/server/browser-externalized-builtin-gate.ts21COMMENT
LOWclients/web/server/vite-hono-plugin.ts41 // when none is supplied). Captured here so the `transformIndexHtml` hook —COMMENT
LOWclients/web/server/start-vite-dev-server.ts61 host: config.hostname,COMMENT
LOWclients/web/server/run-web.ts121 protocolEra?: ServerProtocolEra;COMMENT
LOWclients/web/static/sandbox_proxy.html121COMMENT
LOWclients/web/static/sandbox_proxy.html161 // origins.COMMENT
LOWclients/web/static/sandbox_proxy.html181 //COMMENT
LOWclients/web/static/sandbox_proxy.html221 }COMMENT
LOWclients/web/static/sandbox_proxy.html281 }COMMENT
LOWclients/web/static/sandbox_proxy.html301 innerOrigin = srcUrl.origin;COMMENT
LOWclients/web/src/App.tsx341 // to read *currently* rather than as of the render that created it. DeclaredCOMMENT
LOWclients/web/src/App.tsx361 // the level — visible on the auth-recovery path, which reconnects the sameCOMMENT
LOWclients/web/src/App.tsx421 activeServerEntry?.settings?.paginatedLists ?? false;COMMENT
LOWclients/web/src/App.tsx761 // OAuth details — both are co-located here so the modal opens against theCOMMENT
LOWclients/web/src/App.tsx781 //COMMENT
LOWclients/web/src/App.tsx861 // applies to the instance that exists now.COMMENT
LOWclients/web/src/App.tsx1121COMMENT
LOWclients/web/src/App.tsx1241 // ServerConfigModal's own `useValueChange` reset then blanks the open formCOMMENT
LOWclients/web/src/App.tsx1281 //COMMENT
LOWclients/web/src/App.tsx1361 if (baseline) syncHeadersReconnectToast(id, baseline);COMMENT
LOWclients/web/src/App.tsx1741 () => setConnectionInfoModalOpen(true),COMMENT
LOWclients/web/src/App.tsx1761 // transport close propagate. `onDisconnect` is that `try/finally` alone.COMMENT
LOWclients/web/src/App.test.tsx41vi.mock("@mantine/notifications", () => ({COMMENT
LOWclients/web/src/App.test.tsx61// failure).COMMENT
LOWclients/web/src/App.test.tsx3181 };COMMENT
LOW…eb/src/types/react-syntax-highlighter-prism-light.d.ts1// Type stub for the deep `react-syntax-highlighter` runtime import. UnderCOMMENT
LOWclients/web/src/test/setup.ts1import "@testing-library/jest-dom/vitest";COMMENT
316 more matches not shown…
Hyper-Verbose Identifiers287 hits · 292 pts
SeverityFileLineSnippetContext
LOWclients/tui/__tests__/tsdownConfig.test.ts100function reactRenderingDependencies(): string[] {CODE
LOWclients/tui/src/utils/oauthDisplay.ts25export function formatClientRegistrationKind(CODE
LOWclients/web/vite.config.ts73function browserExternalizedBuiltinGate(): Plugin {CODE
LOWclients/web/server/web-server-config.ts116function defaultEnvironmentFromProcess(CODE
LOWclients/web/server/web-server-config.ts155export function webServerConfigToInitialPayload(CODE
LOWclients/web/server/web-server-config.ts621export function buildWebServerConfigFromEnv(): WebServerConfig {CODE
LOWclients/web/server/app-origin-controller.ts242export function createAppOriginController(CODE
LOWclients/web/server/browser-externalized-builtin-gate.ts39export function isBrowserExternalizedBuiltinLog(CODE
LOWclients/web/server/browser-externalized-builtin-gate.ts50export function browserExternalizedBuiltinError(messages: string[]): Error {CODE
LOWclients/web/server/browser-externalized-builtin-gate.ts87export function createBrowserExternalizedBuiltinGate(): BrowserExternalizedBuiltinGate {CODE
LOWclients/web/server/public-address.ts182export function resolveAppOriginPublicOrigin(CODE
LOWclients/web/src/App.test.tsx2056 async function openSettingsForConnectedServer(CODE
LOWclients/web/src/test/scrollAreaStoryAssertions.ts9export async function expectScrollbarGutterIdleHidden(CODE
LOWclients/web/src/test/scrollAreaStoryAssertions.ts50export async function expectNoHorizontalOverflow(canvasElement: HTMLElement) {CODE
LOWclients/web/src/test/renderWithMantine.tsx76export function renderWithMantineTransitions(CODE
LOWclients/web/src/test/renderWithMantine.tsx315function assertLiveContainersConnected(CODE
LOWclients/web/src/test/core/auth/ema/wire.test.ts49async function useRealDiscoverAndRequestJwtAuthGrant() {CODE
LOW…t/core/mcp/inspectorClient-peer-handler-timing.test.ts1317 function clientWithFreshTransports() {CODE
LOW…test/core/mcp/state/resourceSubscriptionsState.test.ts12function waitForSubscriptionsChange(CODE
LOW…/src/test/integration/auth/node/secretStoreContract.ts33export function describeSecretStoreContract(CODE
LOW…c/test/integration/auth/node/file-secret-store.test.ts878async function writeEncryptedFixtureWithPayload(CODE
LOW…c/test/integration/auth/node/file-secret-store.test.ts893async function writeEncryptedFixtureWithPlaintext(CODE
LOW…/integration/auth/node/oauth-secrets-namespace.test.ts162async function assertTwoProfileIsolation(store: SecretStore): Promise<void> {CODE
LOW…ients/web/src/test/integration/mcp/ema-mock-servers.ts300export async function startMockResourceAsServer(CODE
LOW…c/test/integration/mcp/inspectorClient-ema-e2e.test.ts56async function waitForProtectedResourceMetadata(CODE
LOW…ration/mcp/inspectorClient-timeout-diagnostics.test.ts198 async function waitForNotificationStream(c: InspectorClient): Promise<void> {CODE
LOW…tegration/mcp/inspectorClient-modern-era-oauth.test.ts84 async function startProtectedModernServer(): Promise<string> {CODE
LOW…t/integration/mcp/remote/server-extra-coverage.test.ts1114 async function readSuppressNotificationStream() {CODE
LOW…st/integration/mcp/remote/remote-auth-branches.test.ts65async function startUnauthorizedUpstream(): Promise<{CODE
LOW…egration/mcp/remote/remoteClientTransport-unit.test.ts120function createPushableEventStream() {CODE
LOW…/src/test/integration/helpers/oauth-client-fixtures.ts15export function createStaticRedirectUrlProvider(CODE
LOW…/src/test/integration/helpers/oauth-client-fixtures.ts103export async function createClientMetadataServer(CODE
LOW…/src/test/integration/helpers/oauth-client-fixtures.ts153export async function completeOAuthAuthorization(CODE
LOWclients/web/src/utils/sandbox-csp.ts144export function approveSandboxPermissions(CODE
LOWclients/web/src/utils/jsonObjectDraft.ts49export function findUnsendableNumberLiteral(text: string): string | null {CODE
LOWclients/web/src/utils/correlateTransportErrors.ts52function indexTransportFetchErrors(CODE
LOWclients/web/src/utils/correlateTransportErrors.ts133export function correlatedFetchStatusById(CODE
LOWclients/web/src/utils/mcpNetworkHeaders.ts266export function classifyProtocolSpecError(CODE
LOWclients/web/src/utils/malformedListReport.ts40export function visibleMalformedListItems(CODE
LOWclients/web/src/utils/connectionActivity.ts27export function formatOutstandingRequests(CODE
LOWclients/web/src/utils/replayableProtocolMethods.ts26export function isReplayableProtocolMethod(method: string): boolean {CODE
LOWclients/web/src/utils/oauthClearKey.ts68export function resolveOAuthClearIdentity({CODE
LOWclients/web/src/utils/toasts/progressToasts.ts33export function formatProgressToastMessage(CODE
LOW…xperimentalFeaturesPanel/ExperimentalFeaturesPanel.tsx189export function ExperimentalFeaturesPanel({CODE
LOW⚡…nents/groups/ServerSettingsForm/ServerSettingsForm.tsx662 function changeAuthorizationParams(CODE
LOW⚡…nents/groups/ServerSettingsForm/ServerSettingsForm.tsx668 function handleRequestRefreshTokenChange(CODE
LOW⚡…nents/groups/ServerSettingsForm/ServerSettingsForm.tsx677 function handleScopeOnRefreshChange(CODE
LOW⚡…nents/groups/ServerSettingsForm/ServerSettingsForm.tsx686 function handleRevokeOnClearChange(CODE
LOW⚡…nents/groups/ServerSettingsForm/ServerSettingsForm.tsx695 function handleAddAuthorizationParam(): void {CODE
LOW⚡…nents/groups/ServerSettingsForm/ServerSettingsForm.tsx699 function handleRemoveAuthorizationParam(index: number): void {CODE
LOW⚡…nents/groups/ServerSettingsForm/ServerSettingsForm.tsx705 function handleAuthorizationParamChange(CODE
LOW…ents/groups/ResourceControls/ResourceControls.test.tsx56function ControlledResourceControls(props: Partial<ResourceControlsProps>) {CODE
LOW…endingClientRequestModal/PendingClientRequestModal.tsx87function createDefaultSamplingResult(): CreateMessageResult {CODE
LOW…endingClientRequestModal/PendingClientRequestModal.tsx246export function PendingClientRequestModal({CODE
LOW…nents/groups/ClientSettingsForm/ClientSettingsForm.tsx94function registrationRejectionSummary(error: OAuthRegistrationError): string {CODE
LOW…ents/groups/ClientSettingsForm/clientSettingsValues.ts172export function canPersistClientSettingsDraft(CODE
LOW…/groups/ClientSettingsForm/ClientSettingsForm.test.tsx28function ClientSettingsFormHarness({CODE
LOW⚡…nts/groups/ServerSettingsModal/ServerSettingsModal.tsx219 function handlePaginatedListsChange(value: boolean) {CODE
LOW⚡…nts/groups/ServerSettingsModal/ServerSettingsModal.tsx223 function handleSuppressNotificationStreamChange(value: boolean) {CODE
LOW⚡…nts/groups/ServerSettingsModal/ServerSettingsModal.tsx231 function handleAdvertisedExtensionChange(key: string, checked: boolean) {CODE
227 more matches not shown…
Magic Placeholder Names7 hits · 35 pts
SeverityFileLineSnippetContext
HIGH…web/src/test/integration/mcp/import/serverJson.test.ts28 name: "YOUR_API_KEY",CODE
HIGH…web/src/test/integration/mcp/import/serverJson.test.ts73 name: "YOUR_API_KEY",CODE
HIGH…web/src/test/integration/mcp/import/serverJson.test.ts340 YOUR_API_KEY: "secret",CODE
HIGH…web/src/test/integration/mcp/import/serverJson.test.ts346 env: { YOUR_API_KEY: "secret", LOG_LEVEL: "debug" },CODE
HIGH…web/src/test/integration/mcp/import/serverJson.test.ts425 YOUR_API_KEY: "secret",CODE
HIGH…web/src/test/integration/mcp/import/serverJson.test.ts430 env: { YOUR_API_KEY: "secret", LOG_LEVEL: "info" },CODE
HIGHclients/cli/README.md82npx @modelcontextprotocol/inspector --cli https://my-mcp-server.example.com --transport http --method tools/list --headeCODE
Modern AI Meta-Vocabulary6 hits · 17 pts
SeverityFileLineSnippetContext
MEDIUM…groups/ServerImportJsonModal/ServerImportJsonModal.tsx19 * Display shell for the registry `server.json` import (#1348). All orchestrationCOMMENT
MEDIUM⚡docs/quality-gate.md40| `npm run coverage` | The **per-file ≥90% gate** (lines/statements/functions/branches) under v8 instruCODE
MEDIUM⚡docs/quality-gate.md49| `npm run test:scripts` | Table-driven unit tests (`node --test`) for the guard's own pure parsers (`scripCODE
MEDIUM⚡docs/quality-gate.md55| `npm run local:gate` | **Mandatory pre-push command.** `local:validate` → `local:dco` → `verify:skills:CODE
MEDIUMdocs/inspector-roadmap-2026-h2.md23 - [3.1 Agentic messaging primitives](#31-agentic-messaging-primitives)CODE
MEDIUMspecification/v2_auth_mid_session.md285### App orchestration (`clients/web/src/App.tsx`)COMMENT
AI Slop Vocabulary5 hits · 15 pts
SeverityFileLineSnippetContext
MEDIUMclients/web/src/test/narrowSidebarDecorator.tsx15 * (#2675). A raw `div` with inline style is deliberate: this is test harness,COMMENT
MEDIUMclients/web/src/utils/maskSecrets.ts65// serializations — reformatting alone can't trip the flag, and it's robust ifCOMMENT
MEDIUM…ts/web/src/components/groups/ViewHeader/ViewHeader.tsx74// signal, gating on that would be more robust than a fixed timer.COMMENT
MEDIUMclients/web/src/lib/authToken.ts22// is the robust path: it survives a bare-URL reload, a bookmark, or aCOMMENT
MEDIUMclients/cli/__tests__/emit-result.test.ts204 // stays per-tool robust. readResource must never be reached here.COMMENT
Fake / Example Data10 hits · 10 pts
SeverityFileLineSnippetContext
LOW…nts/web/src/test/core/auth/authorizationParams.test.ts62 login_hint: "user@example.com",CODE
LOW…nts/web/src/test/core/auth/authorizationParams.test.ts68 expect(merged.searchParams.get("login_hint")).toBe("user@example.com");CODE
LOW…rc/components/groups/SchemaForm/SchemaForm.stories.tsx116 name: { type: "string", title: "Name", default: "John Doe" },CODE
LOW…b/src/components/groups/SchemaForm/SchemaForm.test.tsx2150 '{"kind":"sms","phone":"555-0100"}',CODE
LOW…/components/elements/CopyButton/CopyButton.stories.tsx21 "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magCODE
LOW…/components/elements/CopyButton/CopyButton.stories.tsx21 "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magCODE
LOW…nents/elements/MessageBubble/MessageBubble.stories.tsx59 text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et doCODE
LOW…nents/elements/MessageBubble/MessageBubble.stories.tsx59 text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et doCODE
LOW…/components/views/InspectorView/InspectorView.test.tsx1140 appArgs: { kind: "sms", phone: "555-0100" },CODE
LOW…/components/views/InspectorView/InspectorView.test.tsx1159 expect(await screen.findByDisplayValue("555-0100")).toBeInTheDocument();CODE
Cross-Language Confusion (JS/TS)1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHclients/cli/src/completion.ts201 elif [ "$prev" = "=" ] && [ "$COMP_CWORD" -ge 3 ]; thenCODE
Decorative Section Separators1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMclients/web/src/App.css341/* ── Header connect/disconnect animations (#1450) ────────── */COMMENT
Verbosity Indicators1 hit · 2 pts
SeverityFileLineSnippetContext
LOW…/integration/auth/node/oauth-secrets-namespace.test.ts1118 // Step 4: a keychain run on the stamped file. Its read already seesCOMMENT
Structural Annotation Overuse1 hit · 2 pts
SeverityFileLineSnippetContext
LOW…/integration/auth/node/oauth-secrets-namespace.test.ts1118 // Step 4: a keychain run on the stamped file. Its read already seesCOMMENT