AI Slop Code Risk Monitor

apify/apify-mcp-server

SlopCodeMonitor badge for apify/apify-mcp-server Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

The Apify MCP server enables your AI agents to extract data from social media, search engines, maps, e-commerce sites, or any other website using thousands of ready-made scrapers, crawlers, and automation tools available on the Apify Store.

1.8 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for apify/apify-mcp-server, a TypeScript project with 14,128 GitHub stars. SynthScan examined 98,103 lines of code across 435 source files, recording 166 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 1.8 (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.8
Adjusted Signal
1.8
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
14.1K
Stars
TypeScript
Language
98.1K
Lines of Code
435
Files
166
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 7.9/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.6/100 · LOW

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

Agent Over-Engineering Ratio 6.7/100 · LOW

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

PR Review Velocity Impact 8.7/100 · LOW

Which changes need focused human review? 166 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 6LOW 160

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 166 distinct pattern matches across 6 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.

Hyper-Verbose Identifiers131 hits · 131 pts
SeverityFileLineSnippetContext
LOWevals/judge/judge.ts89function formatConversationForJudge(conversation: ConversationHistory): string {CODE
LOWtests/unit/tools.delete_actor_version.test.ts66async function callToolExpectingUserError(args: Record<string, unknown>) {CODE
LOWtests/unit/tools.apify_api_spec.test.ts305 async function importFetchApiOperationIndex() {CODE
LOWtests/unit/mcp.stateless.request_context.test.ts92function widgetRegistryWithSearchActors(): Map<string, WidgetsModule.AvailableWidget> {CODE
LOWtests/unit/mcp.actors.test.ts8function makeActorDefinitionWithPath(webServerMcpPath?: unknown): ActorDefinition {CODE
LOWtests/unit/mcp.server.report_problem_gating.test.ts60async function loadReportProblemByDefault(server: ActorsMcpServer): Promise<void> {CODE
LOWtests/unit/evals.judge.test.ts15function makePromptCapturingClient(): { client: JudgeClient; prompt: () => string } {CODE
LOWtests/unit/tools.schemas.test.ts11function findNonPortableSubschemas(node: SchemaNode, path: string): string[] {CODE
LOWtests/unit/tools.update_actor_version.test.ts112async function callToolExpectingUserError(args: Record<string, unknown>) {CODE
LOWtests/unit/tools.create_actor_version.test.ts115async function callToolExpectingUserError(args: Record<string, unknown>) {CODE
LOWtests/unit/mcp.server.tool_call_contracts.test.ts154function expectClientContextTelemetry(properties: Record<string, unknown>): void {CODE
LOWtests/unit/mcp.server.tool_call_contracts.test.ts198function expectFailureClassTelemetry(CODE
LOWtests/unit/mcp.server.tool_call_contracts.test.ts1043 function statusNotificationStatuses(notifySpy: ReturnType<typeof vi.spyOn>): (string | undefined)[] {CODE
LOWtests/unit/mcp.server.tool_call_contracts.test.ts1051 async function flushDeferredNotification(): Promise<void> {CODE
LOWtests/unit/helpers/mcp_server.ts219export function listStatelessHandlerMethods(server: StatelessServer): string[] {CODE
LOWtests/unit/helpers/mcp_server.ts247export function makePermissionApprovalError(): ApifyApiError {CODE
LOWtests/unit/helpers/tool_context.ts67export function expectSoftFailInvalidInput(result: { isError?: boolean; toolTelemetry?: ToolTelemetrySnapshot }): void {CODE
LOWtests/unit/helpers/tool_context.ts84export function expectSchemaConformingStructuredContent(result: unknown, schema: object): void {CODE
LOWtests/integration/suite.ts30export function createIntegrationTestsSuite(options: IntegrationTestsSuiteOptions) {CODE
LOWtests/test_kit/helpers.ts96export function buildExampleMcpServerAddToolContent(firstNumber: number, secondNumber: number) {CODE
LOWtests/test_kit/helpers.ts135export function validateStructuredOutputForTool(result: unknown, toolName: string, mode: SERVER_MODE): void {CODE
LOWtests/test_kit/helpers.ts140export function expectReadmeInStructuredContent(result: unknown, expectedActorFullName?: string): void {CODE
LOWtests/test_kit/helpers.ts172export function expectNormalModeTestStructuredContent(result: unknown): void {CODE
LOWtests/test_kit/helpers.ts277export async function assertStatusMessagePropagated(CODE
LOWtests/test_kit/mcp_client.ts71export async function createMcpStreamableClient(serverUrl: string, options?: SuiteClientOptions): Promise<Client> {CODE
LOWsrc/telemetry.ts53export function getOrInitAnalyticsClient(telemetryEnv: TelemetryEnv): Analytics | null {CODE
LOWsrc/telemetry.ts105export function buildReportedProblemProperties(CODE
LOWsrc/dev_server.ts60function extractApiTokenFromRequest(req: Request): string | undefined {CODE
LOWsrc/payments/x402.ts164function getPaymentSignatureFromHeader(requestHeaders?: RequestHeaders): string | undefined {CODE
LOWsrc/payments/x402.ts177function getEncodedPaymentSignature(meta?: PaymentMeta, requestHeaders?: RequestHeaders): string | undefined {CODE
LOWsrc/tools/actor_input_schema.ts60export function buildApifySpecificProperties(CODE
LOWsrc/tools/actor_input_schema.ts117export function inferArrayItemsTypeIfMissing(properties: { [key: string]: SchemaProperties }): {CODE
LOWsrc/tools/actor_input_schema.ts145export function markInputPropertiesAsRequired(input: ActorInputSchema): Record<string, SchemaProperties> {CODE
LOWsrc/tools/actor_input_schema.ts218export function pruneSchemaPropertiesByWhitelist(CODE
LOWsrc/tools/actor_input_schema.ts268export function addExampleValuesToDescriptions(CODE
LOWsrc/tools/actor_input_schema.ts388export function transformActorInputSchemaProperties(input: Readonly<ActorInputSchema>): ActorInputSchemaProperties {CODE
LOWsrc/tools/structured_output_schemas.ts905export function buildEnrichedDirectActorOutputSchema(itemProperties: Record<string, unknown>) {CODE
LOWsrc/tools/structured_output_schemas.ts940function paginatedListOutputSchema(itemsSchema: object, itemsDescription: string) {CODE
LOWsrc/tools/index.ts43export function getUnauthEnabledToolCategories(): ToolCategory[] {CODE
LOWsrc/tools/actor_tool_naming.ts46export function getActorToolModeFromInterfaces({ input, mcp }: ActorInterfaces): ACTOR_TOOL_MODE {CODE
LOWsrc/tools/actor_tool_naming.ts63export function isActorBlockedUnderPaymentProvider(actor: Pick<ActorInfo['actor'], 'actorStandby'>): boolean {CODE
LOWsrc/tools/actor_tool_naming.ts120export function getActorCallabilityCaveat(clientParam?: string): string {CODE
LOWsrc/tools/versions/create_actor_version.ts65function formatSecretEnvVarsWarning(CODE
LOWsrc/tools/docs/search_apify_docs.ts17function buildDocSourceDescription(): string {CODE
LOWsrc/tools/builds/get_actor_build_list.ts51function buildNextStepForBuildList(CODE
LOWsrc/tools/storage/storage_helpers.ts136export function buildStorageListSummaryNextStep(params: {CODE
LOWsrc/tools/storage/storage_helpers.ts169export function buildDatasetItemsSummaryNextStep(params: {CODE
LOWsrc/tools/storage/storage_helpers.ts200export function buildKvsKeysSummaryNextStep(params: {CODE
LOWsrc/tools/storage/storage_helpers.ts271export function buildBinaryRecordDisposition(contentType: string | undefined, value: Buffer): BinaryRecordDisposition {CODE
LOWsrc/tools/actors/server_interface_schema.ts138function buildServerOperationDetails({ method, path, operation }: ServerOperation, context: DereferenceContext) {CODE
LOWsrc/tools/actors/actor_definition.ts84export async function resolveServerInterfaceDefinition(CODE
LOWsrc/tools/actors/actor_definition.ts143function hasWebServerSchemaOperations(schema: unknown): boolean {CODE
LOWsrc/tools/actors/fetch_actor_details.ts153export function buildActorNotFoundResponse(actorName: string, loadedToolNames: readonly string[]): ToolResponse {CODE
LOWsrc/tools/actors/fetch_actor_details.ts166export function buildActorNotRunnableGuidance(CODE
LOWsrc/tools/actors/fetch_actor_details.ts179export function buildActorDetailsTextResponse(options: {CODE
LOWsrc/tools/actors/fetch_actor_details.ts253export async function buildFetchActorDetailsResult(toolArgs: InternalToolArgs): Promise<ToolResponse> {CODE
LOWsrc/tools/actors/fetch_actor_mcp_tool_list.ts48export async function executeFetchActorMcpToolList(toolArgs: InternalToolArgs): Promise<ToolResponse> {CODE
LOWsrc/tools/actors/actor_run_response.ts415async function fetchDatasetItemCountWithLagFallback(CODE
LOWsrc/tools/actors/actor_run_response.ts556function buildSucceededSummaryNextStep(CODE
LOWsrc/tools/actors/actor_run_response.ts611function buildTimedOutSummaryNextStep(CODE
71 more matches not shown…
Structural Annotation Overuse10 hits · 15 pts
SeverityFileLineSnippetContext
LOW.claude/skills/bug-triage/SKILL.md21## Step 0: Parse argumentsCOMMENT
LOW.claude/skills/bug-triage/SKILL.md32## Step 1: Fetch issuesCOMMENT
LOW.claude/skills/bug-triage/SKILL.md65## Step 2: Categorize each issueCOMMENT
LOW.claude/skills/bug-triage/SKILL.md92## Step 3: Draft responseCOMMENT
LOW.claude/skills/bug-triage/SKILL.md113## Step 4: Present and get approvalCOMMENT
LOW.claude/skills/bug-triage/SKILL.md124## Step 5: PostCOMMENT
LOW.claude/skills/dig/SKILL.md16## Step 0: Parse arguments and determine intentCOMMENT
LOW.claude/skills/dig/SKILL.md47## Step 1: ExploreCOMMENT
LOW.claude/skills/dig/SKILL.md59## Step 2: Plan (Plan and Spec only)COMMENT
LOW.claude/skills/dig/SKILL.md90## Step 3: Spec (Spec only)COMMENT
Fake / Example Data12 hits · 12 pts
SeverityFileLineSnippetContext
LOWtests/unit/mcp.server.report_problem_nudge.test.ts56 token: 'fake-token',CODE
LOWtests/unit/mcp.stateless.tool_call.test.ts255 expect(received.apifyToken).toBe('fake-token');CODE
LOWtests/unit/tool_call_engine.test.ts84 apifyToken: 'fake-token',CODE
LOWtests/unit/tool_call_engine.test.ts108 apifyToken: 'fake-token',CODE
LOWtests/unit/tool_call_engine.test.ts131 apifyToken: 'fake-token',CODE
LOWtests/unit/tool_call_engine.test.ts157 apifyToken: 'fake-token',CODE
LOWtests/unit/tool_call_engine.test.ts212 apifyToken: 'fake-token',CODE
LOWtests/unit/tool_call_engine.test.ts281 apifyToken: 'fake-token',CODE
LOWtests/unit/tool_call_engine.test.ts343 apifyToken: 'fake-token',CODE
LOWtests/unit/tool_call_engine.test.ts359 apifyToken: 'fake-token',CODE
LOWtests/unit/helpers/mcp_server.ts76 token: 'fake-token',CODE
LOW.claude/skills/creating-mcp-agent-evals/SKILL.md55- An obviously fake URL in a query (`ftp.example.com`, `this-is-a-test.com`) → models defensibly refuse "placeholder" taCODE
Modern AI Meta-Vocabulary4 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMREADME.md374> 🪙 **Agentic payments (experimental).** Agents can pay for Actor runs without an Apify account. [AGI](https://agi.apifyCODE
MEDIUMtests/unit/utils.actor_card.test.ts104 expect(result).toContain('## [RAG Web Browser](https://apify.com/apify/rag-web-browser)');CODE
MEDIUMtests/unit/utils.actor_card.test.ts154 expect(result).toContain('## [RAG Web Browser](https://apify.com/apify/rag-web-browser)');CODE
MEDIUMsrc/payments/AGENTS.md2# src/payments — agentic payment providers (Skyfire, x402)COMMENT
Over-Commented Block7 hits · 7 pts
SeverityFileLineSnippetContext
LOWpnpm-workspace.yaml21# Postinstall protection — pnpm only runs build scripts for packages with `: true` here.COMMENT
LOWscripts/conformance_expected_failures_2026_07_28.yaml1# Conformance scenarios excluded from the pass/fail gate of `pnpm run test:conformance` for theCOMMENT
LOWscripts/conformance_expected_failures_2026_07_28.yaml21# scopes them out of this revision. They are not part of it; they do run in the legacy era, whereCOMMENT
LOWscripts/conformance_expected_failures_2026_07_28.yaml81 # Needs fixture tool `test_input_required_result_elicitation`.COMMENT
LOWscripts/conformance_expected_failures_2025_11_25.yaml1# Conformance scenarios excluded from the pass/fail gate of `pnpm run test:conformance` for theCOMMENT
LOWscripts/conformance_expected_failures_2025_11_25.yaml61 # Needs fixture prompt `test_prompt_with_image`.COMMENT
LOWsrc/tools/storage/get_dataset.ts81 // The API also returns a raw `schema` (untyped in apify-client). It is 93–95% of theCOMMENT
Decorative Section Separators2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMtests/unit/utils.pricing_info.test.ts156// ─── Complete mode: fetch-actor-details ───────────────────────────────────────COMMENT
MEDIUMtests/unit/utils.pricing_info.test.ts262// ─── Simplified mode: search-actors ───────────────────────────────────────────COMMENT