AI Slop Code Risk Monitor

modelcontextprotocol/rust-sdk

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

The official Rust SDK for the Model Context Protocol

2.7 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for modelcontextprotocol/rust-sdk, a Rust project with 4,077 GitHub stars. SynthScan examined 121,455 lines of code across 293 source files, recording 287 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 2.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.

2.7
Adjusted Signal
2.7
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
4.1K
Stars
Rust
Language
121.5K
Lines of Code
293
Files
287
Pattern Hits
2026-10-31
Scan Date
0.00
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 9.8/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.3/100 · LOW

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

Agent Over-Engineering Ratio 2.7/100 · LOW

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

PR Review Velocity Impact 12.9/100 · LOW

Which changes need focused human review? 287 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 0MEDIUM 25LOW 262

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 287 distinct pattern matches across 7 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 Block254 hits · 242 pts
SeverityFileLineSnippetContext
LOW…es/rmcp/tests/test_streamable_http_protocol_version.rs541// ---------------------------------------------------------------------------COMMENT
LOWcrates/rmcp/tests/test_sep_2260_stream_enforcement.rs1//! SEP-2260 follow-up (#1033): stream-based receive-side enforcement.COMMENT
LOWcrates/rmcp/tests/test_sse_concurrent_streams.rs1#![cfg(not(feature = "local"))]COMMENT
LOWcrates/rmcp/tests/test_abandoned_request_cancel.rs21use serde_json::json;COMMENT
LOWcrates/rmcp/src/transport.rs1//! # TransportCOMMENT
LOWcrates/rmcp/src/transport.rs21//! This transport is used to create a transport from a byte stream which implemented [`tokio::io::AsyncRead`] and [`tokCOMMENT
LOWcrates/rmcp/src/transport.rs41//! ```rustCOMMENT
LOWcrates/rmcp/src/service.rs1use std::{borrow::Cow, sync::OnceLock};COMMENT
LOWcrates/rmcp/src/service.rs181COMMENT
LOWcrates/rmcp/src/service.rs241}COMMENT
LOWcrates/rmcp/src/service.rs1101 /// This will block until the service loop terminates (either due toCOMMENT
LOWcrates/rmcp/src/service.rs1121 /// # ExampleCOMMENT
LOWcrates/rmcp/src/task_manager.rs1//! Server-side runtime for the MCP Tasks extension (SEP-2663,COMMENT
LOWcrates/rmcp/src/task_manager.rs281/// aborted), and terminal tasks are evicted after being retained for oneCOMMENT
LOWcrates/rmcp/src/task_manager.rs441 /// does **not** abort the underlying future or force a terminal state.COMMENT
LOWcrates/rmcp/src/model.rs181 /// First protocol version that replaced the `initialize` handshake withCOMMENT
LOWcrates/rmcp/src/model.rs221 /// lifecycle into per-request `_meta`. Unknown versions are comparedCOMMENT
LOWcrates/rmcp/src/model.rs241 /// The result borrows from [`Self::KNOWN_VERSIONS`], so call it directlyCOMMENT
LOWcrates/rmcp/src/model.rs421/// Type alias for request identifiers used in JSON-RPC communication.COMMENT
LOWcrates/rmcp/src/model.rs441/// - `method`: The name of the method being calledCOMMENT
LOWcrates/rmcp/src/model.rs761 hasher.write(b"rmcp transport-closed marker");COMMENT
LOWcrates/rmcp/src/model.rs1141/// This notification indicates that the result will be unused, so any associated processing SHOULD cease.COMMENT
LOWcrates/rmcp/src/model.rs1181}COMMENT
LOWcrates/rmcp/src/model.rs1221/// This request is sent from the client to the server when it first connects, asking it to begin initialization.COMMENT
LOWcrates/rmcp/src/model.rs1321 pub fn with_protocol_version(mut self, protocol_version: ProtocolVersion) -> Self {COMMENT
LOWcrates/rmcp/src/model.rs1341/// assert!(config.capabilities.tools.is_some());COMMENT
LOWcrates/rmcp/src/model.rs1361/// assert!(config.capabilities.elicitation.is_some());COMMENT
LOWcrates/rmcp/src/model.rs1381/// Information negotiated about a server peer.COMMENT
LOWcrates/rmcp/src/model.rs1621 /// Indicates the icon is designed to be used with a light backgroundCOMMENT
LOWcrates/rmcp/src/model.rs1841pub type ProgressNotification = Notification<ProgressNotificationMethod, ProgressNotificationParam>;COMMENT
LOWcrates/rmcp/src/model.rs1861///COMMENT
LOWcrates/rmcp/src/model.rs1901 #[expect(clippy::exhaustive_structs, reason = "intentionally exhaustive")]COMMENT
LOWcrates/rmcp/src/model.rs2061 /// Result type discriminator (SEP-2322). Required by the [spec schema]COMMENT
LOWcrates/rmcp/src/model.rs2241#[serde(rename_all = "camelCase")]COMMENT
LOWcrates/rmcp/src/model.rs2841// =============================================================================COMMENT
LOWcrates/rmcp/src/model.rs2861 /// An AI assistant or server providing a responseCOMMENT
LOWcrates/rmcp/src/model.rs3161#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]COMMENT
LOWcrates/rmcp/src/model.rs3181///COMMENT
LOWcrates/rmcp/src/model.rs3201 /// System prompt to guide the model's behaviorCOMMENT
LOWcrates/rmcp/src/model.rs3381}COMMENT
LOWcrates/rmcp/src/model.rs3661 Ok(())COMMENT
LOWcrates/rmcp/src/model.rs3901COMMENT
LOWcrates/rmcp/src/model.rs3981 }COMMENT
LOWcrates/rmcp/src/model.rs4001/// .build()COMMENT
LOWcrates/rmcp/src/model.rs4021 FormElicitationParams {COMMENT
LOWcrates/rmcp/src/model.rs4121COMMENT
LOWcrates/rmcp/src/model.rs4141 /// for servers implementing protocol version `2026-07-28`, but optionalCOMMENT
LOWcrates/rmcp/src/model.rs4161 #[serde(skip_serializing_if = "Option::is_none")]COMMENT
LOWcrates/rmcp/src/model.rs4261 /// rows, an external API returned 500, the user's input is plausibleCOMMENT
LOWcrates/rmcp/src/model.rs4281 /// // as -32602 invalid_params:COMMENT
LOWcrates/rmcp/src/model.rs4301 result_type: Some(ResultType::COMPLETE),COMMENT
LOWcrates/rmcp/src/model.rs4321 /// ```COMMENT
LOWcrates/rmcp/src/model.rs4401 }COMMENT
LOWcrates/rmcp/src/model.rs4541 /// for servers implementing protocol version `2026-07-28`, but optionalCOMMENT
LOWcrates/rmcp/src/model.rs4621COMMENT
LOWcrates/rmcp/src/model.rs5041 /// Empty `tasks/update` / `tasks/cancel` acknowledgement carrying theCOMMENT
LOWcrates/rmcp/src/model.rs5081 };COMMENT
LOWcrates/rmcp/src/model.rs5101 /// use rmcp::model::{CacheScope, ListResourcesResult, ServerResult};COMMENT
LOWcrates/rmcp/src/handler/client.rs121 /// * `request` - The elicitation request with message and schemaCOMMENT
LOWcrates/rmcp/src/handler/client.rs141 ///COMMENT
194 more matches not shown…
Decorative Section Separators22 hits · 66 pts
SeverityFileLineSnippetContext
MEDIUMcrates/rmcp/tests/test_sse_concurrent_streams.rs34// ─── Test server ────────────────────────────────────────────────────────────COMMENT
MEDIUMcrates/rmcp/tests/test_sse_concurrent_streams.rs72// ─── Helpers ────────────────────────────────────────────────────────────────COMMENT
MEDIUMcrates/rmcp/tests/test_sse_concurrent_streams.rs204// ─── Tests: Shadow stream creation ──────────────────────────────────────────COMMENT
MEDIUMcrates/rmcp/tests/test_sse_concurrent_streams.rs260// ─── Tests: Dead primary replacement ────────────────────────────────────────COMMENT
MEDIUMcrates/rmcp/tests/test_sse_concurrent_streams.rs357// ─── Tests: Notification routing ────────────────────────────────────────────COMMENT
MEDIUMcrates/rmcp/tests/test_sse_concurrent_streams.rs394// ─── Tests: Resume with Last-Event-ID ───────────────────────────────────────COMMENT
MEDIUMcrates/rmcp/tests/test_sse_concurrent_streams.rs491// ─── Tests: Mixed scenarios ─────────────────────────────────────────────────COMMENT
MEDIUMcrates/rmcp/tests/test_sse_concurrent_streams.rs569// ─── Tests: Edge cases ──────────────────────────────────────────────────────COMMENT
MEDIUMcrates/rmcp/tests/test_sse_concurrent_streams.rs695// ─── Tests: Cache replay on dead primary replacement ─────────────────────────COMMENT
MEDIUMcrates/rmcp/tests/test_sse_concurrent_streams.rs738// ─── Tests: Shadow stream limits ─────────────────────────────────────────────COMMENT
MEDIUMcrates/rmcp/tests/test_tool_routers.rs271// ── Notifier tests ──────────────────────────────────────────────────────COMMENT
MEDIUMscripts/keycloak-oauth-fixture.sh2# =============================================================================COMMENT
MEDIUMscripts/keycloak-oauth-fixture.sh16# =============================================================================COMMENT
MEDIUMconformance/src/bin/client.rs25// ─── Context parsed from MCP_CONFORMANCE_CONTEXT ────────────────────────────COMMENT
MEDIUMconformance/src/bin/client.rs67// ─── Client handlers ────────────────────────────────────────────────────────COMMENT
MEDIUMconformance/src/bin/client.rs210// ─── OAuth helpers ──────────────────────────────────────────────────────────COMMENT
MEDIUMconformance/src/bin/client.rs852// ─── Helpers ────────────────────────────────────────────────────────────────COMMENT
MEDIUMconformance/src/bin/client.rs917// ─── Non-auth scenarios ─────────────────────────────────────────────────────COMMENT
MEDIUMconformance/src/bin/client.rs1096// ─── Main ───────────────────────────────────────────────────────────────────COMMENT
MEDIUMconformance/src/bin/server.rs83// ─── SEP-2640 Skills extension fixtures ─────────────────────────────────────COMMENT
MEDIUMconformance/src/bin/server.rs211// ─── SEP-2663 Tasks extension fixtures ──────────────────────────────────────COMMENT
MEDIUMconformance/src/bin/server.rs297// ─── SEP-2322 MRTR (InputRequiredResult) helpers ────────────────────────────COMMENT
Fake / Example Data6 hits · 6 pts
SeverityFileLineSnippetContext
LOWcrates/rmcp/tests/test_elicitation.rs102 .with_content(json!({"email": "user@example.com"}));CODE
LOWcrates/rmcp/tests/test_elicitation.rs107 "content": {"email": "user@example.com"}CODE
LOWcrates/rmcp/tests/test_elicitation.rs843 ElicitResult::new(ElicitationAction::Accept).with_content(json!("John Doe")),CODE
LOWcrates/rmcp/tests/test_elicitation.rs850 assert_eq!(result.content, Some(json!("John Doe")));CODE
LOWexamples/servers/src/completion_stdio.rs377 vec!["'John Doe'", "'jane@example.com'", "123", "NOW()"]CODE
LOWconformance/src/bin/server.rs1398 "default": "John Doe"CODE
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMcrates/rmcp-macros/src/lib.rs249/// #[prompt(name = "code_review", description = "Reviews code for best practices")]COMMENT
Slop Phrases1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMexamples/servers/src/simple_auth_streamhttp.rs49 // For demonstration purposes, use more secure token management in productionCOMMENT
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUM.github/workflows/release-plz.yml40 # Create a PR with the new versions and changelog, preparing the next release.COMMENT
Unused Imports2 hits · 2 pts
SeverityFileLineSnippetContext
LOWcrates/rmcp/tests/test_with_python/client.py1CODE
LOWcrates/rmcp/tests/test_with_python/client.py1CODE