slop-scorer
slop-scorer-mcp
코딩 에이전트에게 인용과 함께 코드베이스나 렌더링된 웹 페이지의 어느 부분이 기계 생성 템플릿 출력으로 읽히는지 알려주고, 각각을 제거할 정확한 편집을 돌려주는 MCP 서버입니다.
이 서버에는 어떤 모델도 관여하지 않습니다. 모든 발견 항목은 파일과 줄 번호, 또는 CSS 선택자와 계산된 스타일 값을 인용하므로 직접 가서 확인할 수 있습니다. 70개의 규칙, 모두 데이터이며 각각 자신만의 반박을 담고 있습니다.
claude mcp add slop-scorer -- npx -y github:Yuve21/slop-scorer-mcpNode 20 이상만 있으면 되고 그 외에는 아무것도 필요 없습니다. 아직 npm에 없으므로 그 줄은 이 저장소에서 설치합니다. 첫 실행은 컴파일하며 약 1분이 걸립니다. 자세한 내용과 다른 두 가지 설치 방법은 설치 아래에 있습니다.
왜 존재하는가
흥미로운 부분은 탐지가 아닙니다. 바로 list_rules입니다. 이 도구는 전체 코퍼스를 반환하여 에이전트가 무엇이든 생성하기 전에 무엇을 만들지 말아야 하는지 읽을 수 있게 합니다.
탐지는 결국 지는 경주입니다. 생성기가 개선되면 징후는 낡아가고, 징후 코퍼스는 가치가 떨어지는 자산입니다. 예방은 낡지 않습니다. 코퍼스를 먼저 읽은 에이전트는 코퍼스가 반응하지 않는 작업을 작성하기 때문입니다. 이것은 사용될수록 강해지는 유일한 루프입니다.
Related MCP server: Sensory-Grounding MCP
하지 않는 일
이것은 기능 목록보다 중요하므로 먼저 둡니다.
사람이 AI를 사용했다고 말하지 않습니다. 이 서버가 내보낼 수 있는 모든 문장은 같은 문법을 가집니다. 주어는 서버이고, 목적어는 산출물이며, 동사는 서버가 한 일입니다. "우리는 이 산출물을 15개의 결정적 규칙으로 검사했고 88% 커버리지에서 4개가 일치했습니다." "이것은 AI입니다"가 아닙니다. 포매터는 다른 문장을 표현할 수 없으며,
@slop/core의 테스트는 금지된 문구가 소스에 나타나면 빌드를 실패시킵니다.기권은 결과이지 실패가 아닙니다.
status는assessed,inconclusive(살펴봤지만 숫자를 공개하지 않음) 또는not_assessed(살펴보지 않음)입니다. 두 기권 모두score: null과 코드화된 이유를 담습니다. 그것들은 낮은 점수도 아니고 건강 진단서도 아닙니다.score가 아니라status로 분기하십시오.점수는 99에서 멈춥니다. 확실성에 도달하는 증거의 조합은 존재하지 않습니다.
빈약한 읽기는 점수를 완전히 보류합니다. 절반만 렌더링된 페이지는 깨끗한 페이지와 똑같이 보이며, 부분적인 읽기 위에 자신 있는 숫자를 인쇄하는 것은 이 서버가 할 수 있는 가장 부정직한 일일 것입니다.
어디에도 정확도 수치를 게시하지 않습니다.
packages/core/test/no-claims.test.ts는 각 테스트 실행 시 배포되는 모든 소스 파일과 모든 README를 스캔하며, 하나라도 나타나면 빌드를 실패시킵니다. 추론에 대한 정확도 주장은 FTC법 제5조(In re Workado, 2026)에 따라 입증을 수반하는 주장이므로, 정확도 수치를 보유하는 유일하게 방어 가능한 방법은 테스트 시점에 명명된 코퍼스에서 계산하는 것입니다. 숫자를 원한다면npm run backtest를 실행하고 자신의 숫자를 읽으십시오.파일을 절대 쓰지 않습니다. 패키지 어디에도 파일시스템 쓰기,
exec, 쓰기 권한 요청이 없습니다. 수정 사항은 데이터로 돌아와 에이전트가 일반적인 승인 흐름에 따라 적용합니다.
설치
slop-scorer-mcp는 아직 npm 레지스트리에 없습니다. 따라서 여기의 모든 명령은 이 저장소에서 설치합니다. 잘 작동하지만, 설치가 고장났다고 판단하기 전에 읽어볼 가치가 있는 주의사항이 하나 있습니다.
첫 실행은 소스에서 컴파일합니다. 빈 npm 캐시로 콜드 상태에서 측정한 결과: 69초입니다. 대부분의 MCP 클라이언트는 서버가 응답할 시간으로 30초를 주므로, 아무 문제가 없어도 첫 연결이 connection timed out을 보고할 수 있습니다. 다시 연결하거나 먼저 캐시를 예열하십시오:
npx -y github:Yuve21/slop-scorer-mcp # wait for "listening on stdio", then Ctrl-C그 후의 모든 실행은 캐시에서 즉시 이루어집니다.
Claude Code
claude mcp add slop-scorer -- npx -y github:Yuve21/slop-scorer-mcpClaude Desktop
macOS에서는 ~/Library/Application Support/Claude/claude_desktop_config.json, Windows에서는 %APPDATA%\Claude\claude_desktop_config.json입니다. 그 후 앱을 다시 시작하십시오.
{ "mcpServers": { "slop-scorer": { "command": "npx", "args": ["-y", "github:Yuve21/slop-scorer-mcp"] } } }Cursor
전역으로는 ~/.cursor/mcp.json, 프로젝트별로는 .cursor/mcp.json입니다. 같은 블록입니다. 창을 새로고침하십시오.
{ "mcpServers": { "slop-scorer": { "command": "npx", "args": ["-y", "github:Yuve21/slop-scorer-mcp"] } } }체크아웃에서 설치
규칙을 변경하고 그것이 발동하는 것을 지켜보려면 이것을 사용하십시오.
git clone https://github.com/Yuve21/slop-scorer-mcp
cd slop-scorer-mcp
npm install # `prepare` builds it for you
npm run install:local --workspace=packages/mcp-server마지막 줄은 빌드된 바이너리를 절대 경로로 claude mcp add에 등록합니다. claude CLI가 PATH에 없으면 조용히 실패하는 대신 손으로 붙여 넣을 JSON 블록을 출력합니다.
npm에 등록되면
claude mcp add slop-scorer -- npx -y slop-scorer-mcp레지스트리 tarball이 컴파일된 상태로 배포되므로 빌드 단계도, 콜드 스타트도 없습니다. 오늘 현재 이 링크는 404를 반환합니다.
GitHub 설치가 작동하는 방식
npx -y github:...은 저장소 ROOT를 해석하며, npm은 git 스펙이 하위 디렉터리를 가리키게 할 방법이 없습니다. 따라서 여기 루트 package.json에는 bin(단일 항목, npx가 실행 파일을 선택할 수 있게 해주는 것), prepare 스크립트(npm이 git 의존성에 대해 실행하는 유일한 라이프사이클 훅이며, prepack은 거기서 실행되지 않습니다), packages/mcp-server/dist를 지정하는 files 목록(dist/가 gitignore되어 있고 npm은 패킹 시 .gitignore로 폴백하므로, 바이너리가 제거된 채 tarball이 배포될 수 있기 때문입니다), 그리고 esbuild 번들이 외부로 남겨 두는 두 개의 런타임 의존성이 들어 있습니다. 그 옆에는 루트 .npmignore가 있어 .gitignore는 전혀 참조되지 않습니다.
scan_ui에는 브라우저가 필요합니다
npx playwright install chromium브라우저가 없으면 scan_ui는 status: "not_assessed"를 반환하고 이유를 말합니다. 서버 HTML을 읽는 방식으로 폴백하지 않습니다. fetch 전용 읽기는 아무도 보지 않는 문서에 대해 자신 있는 발견 항목을 만들어 내는데, 이것이 한 헤딩 검사가 하이드레이션 전까지는 존재하지 않는 헤딩을 가진 라우트에 대해 "이 라우트에는 H1이 0개입니다"라고 보고한 방식입니다.
다섯 가지 도구
도구 | 하는 일 |
| 전체 코퍼스를 간결하게 반환합니다. 생성 전에 읽으십시오. |
| 체크아웃의 정적 분석과 git 기록을 제공합니다. |
| URL 또는 개발 서버를 Chromium에서 렌더링하고 렌더링된 문서를 측정합니다. |
| 다시 스캔하여 각 발견 항목을 정확하고 조건이 명시된 편집으로 반환합니다. |
| 다시 스캔하여 전후 발견 집합을 나란히 놓습니다. |
list_rules
두 코퍼스에 걸친 70개의 규칙: 웹 51개, 코드 19개. 기본적으로 간결합니다. 무엇이든 생성하기 전에 호출되도록 요청하는 도구가 작은 컨텍스트 창의 5분의 1을 소비할 수는 없기 때문입니다.
index every rule, one line: id | family | polarity/severity | weight | rationale
fullEntries why it reads as generated, the counter-evidence that rebuts it, how to avoid it
retrieval a sentence on every response saying how to get what was left outmodality: "web" | "code" | "all" optional
family: e.g. "agent-artifact" optional
ruleIds: ["craft.no-og-image", ...] full entries for these only
verbose: true, full entries for every rule costs roughly 18k tokens스캔 후 일반적인 패턴은 ruleIds: [...the ids that fired]이며, 이는 수백 개의 토큰만 소비하고 행동에 필요한 반박과 예방 메모를 정확히 반환합니다.
scan_codebase
path: absolute path to the repository root
include: optional patterns, e.g. ["src/**/*.ts"]
readHistory: read git history for the commit-shape rules (default true)
maxFiles: cap on files walked (default 5000)이 서버를 자신의 체크아웃에 지정하여 생성된 실제 판독입니다. 여기 있는 것은 손으로 입력한 것이 아닙니다. 길이를 위해 약간 다듬은 응답 바이트입니다. 이 판독이 우리 자신에게서도 문제를 찾는다는 점에 주목하십시오.
SLOP RECEIPT 20 / 99 band: few known signals
corpus code-corpus-2026.09 | coverage 100% | families fired 2
evidence kind: deterministic | detectors: code.static-rules
We checked this artifact against 19 deterministic rules from code-corpus-2026.09 and 4
matched, on 100% coverage. That places it in the "few known signals" band at 20 of 99.
Every match below cites what we read and where.
15 base rate before any evidence
+26 scaffold.placeholder-markers [scaffold-residue / medium] -> 41
Unfilled placeholders left in shipped source
evidence: line packages/detectors-code/src/artifact.ts:73 = "lorem ipsum"
(expected "a real value")
evidence: line packages/detectors-code/src/artifact.ts:109 = "TODO: implement"
(expected "a real value")
evidence: line packages/detectors-code/src/suppression.ts:18 = "lorem ipsum"
(expected "a real value")
... and 4 more, 5 counted toward the weight
caveat: TODOs are a normal and healthy way to record known gaps, and a mature
codebase carries plenty. Markers that name an owner or a ticket are
excluded as tracked work. Suppressed by suppress.self-defining-pattern:
19 match(es) were withdrawn as self-referential: the cited lines in
packages/detectors-code/src/scan.ts are the DEFINITION of the patterns
that matched them, not uses of them.
+23 verify.tautological-tests [verification-floor / high] -> 64
Tests that cannot fail
evidence: file packages/detectors-code/test/corpus/index.ts
= "93 lines, 0 assertions" (expected "at least one assertion")
evidence: file packages/detectors-web/test/corpus/index.ts
= "60 lines, 0 assertions" (expected "at least one assertion")
caveat: A deliberate smoke test that only checks a module imports without
throwing looks like this, and an assertion helper the scanner does not
recognise reads as zero assertions.
-42 counter.rationale-comments [counter-evidence / counter] -> 22
Comments that record a reason, not a restatement
evidence: line packages/core/src/assessment.ts:61 = "We read the artifact cleanly
and it carried no declared provenance either way. ABSENCE OF PROVENANCE
IS NOT EVIDENCE OF GENERATION."
... and 3 more, 4 counted toward the weight
caveat: A rationale comment can be copied along with the code it explains, and an
agent prompted to explain its reasoning will write plausible ones. The
signal is real but it is not proof.
-2 counter.real-test-coverage [counter-evidence / counter] -> 20
Tests dense enough to actually fail
evidence: metric "26 test files against 63 source files"
= "606 assertions, 0 tautologies"
20 TOTAL (base 15 + 4 contribution(s))
FAMILY CAPS
Scaffold residue +26 pts logit 1.37 of 1.60 allowed
Verification floor +23 pts logit 1.35 of 0.96 allowed AT CAP
Global counter-evidence logit -2.00 AT CAP (bypasses family caps)
WHAT WOULD CHANGE THIS SCORE
-26 scaffold.placeholder-markers: Fail the build on the placeholder strings your
scaffold ships with. They are the ones nobody notices.
-23 verify.tautological-tests: Mutation-test the test: break the code it covers and
confirm it goes red. If it stays green, delete it or fix it.
A high score means this artifact resembles generated-template output. It is not proof that
a tool made it, and it is not a judgement of the person who made it.그 출력에서 네 가지를 짚어 볼 가치가 있습니다. 그것들이 바로 설계이기 때문입니다:
반대 증거는 차감됩니다. 네 개의 일치 항목 중 두 개는 산출물에 유리한 쪽으로 작용하며, 합쳐서 반대 측의 모든 것보다 가치가 큽니다. 오직 비난만 할 수 있는 코퍼스는 모든 신중한 코드베이스를 생성된 것으로 채점할 것입니다.
패밀리에는 상한이 있습니다. "Verification floor"는 23점을 기여했고
AT CAP으로 표시되어, 상호 연관된 징후 그룹 하나가 단독으로 판정을 이끌 수 없습니다.영수증은 일치합니다. 기본율에 인쇄된 모든 기여를 더하면 인쇄된 점수와 정확히 정수로 같아집니다. 숫자를 손으로 다시 계산할 수 있습니다.
억제기가 발동했고 그렇게 말했습니다. 일치한 줄이 패턴을 정의하는 패턴 표이므로 19개의 플레이스홀더 일치 항목이 철회되었습니다. 2단계 억제기는 산출물이 아닌 탐지기에 관한 증거를 철회할 수 있지만, 영수증에서 확인할 수 있도록 규칙, 파일, 이유를 명명해야 합니다.
실제 응답에서 스캔된 산출물에서 복사된 모든 값은 untrusted 펜스로 감싸지고 페이로드는 프롬프트 인젝션 경고로 끝납니다. 낯선 사람의 소스를 에이전트의 컨텍스트에 인용하는 스캐너는 인젝션 벡터이기 때문입니다. 위의 펜스는 예시가 읽히도록 하기 위해서만 제거되었습니다.
scan_ui
url: https://example.com/pricing
port: 3000 (instead of url, for a local dev server)
viewportWidth: default 390
viewportHeight: default 844Chromium에서 렌더링하고 렌더링된 문서를 측정합니다: 빌더 지문, 기본 시각적 언어, 조악한 마감 결함, 구조 및 움직임의 균일성, 카피의 징후. 실제 발견 사례:
+7 css.crushed-tracking [visual-default / medium] -> 34
Headline letter-spacing is crushed at a heavy weight
evidence: css letter-spacing on h1 = "-0.04em at weight 800"
(expected "-0.02em or looser at weight 700+")
caveat: Some faces genuinely want negative tracking at display size, and a
type-literate designer may choose exactly this. It is a taste signal,
not a provenance signal.이 빌드에서 한 가지 기능이 빠져 있으며, 의도적으로 빠져 있습니다. 이미지 내부에 렌더링된 텍스트는 여기에서 복구되지 않습니다. 복구기는 프로젝트의 비공개 절반에 있으며, 이 저장소의 packages/ocr-text는 요청받은 모든 이미지에 명시된 이유를 첨부한 채 항상 기권합니다. 따라서 세 개의 imgtext.* 규칙은 실제 scan_ui 실행에서는 발동할 수 없습니다. 그 규칙들은 list_rules에 남아 있고(카피를 JPEG에 묻지 말라는 조언은 어느 쪽이든 읽을 가치가 있습니다) 동결된 코퍼스 아티팩트에 대해서는 여전히 점수를 매기므로, 보관된 숫자는 움직이지 않습니다. 읽히지 않은 이미지는 단어가 없는 이미지가 아니기 때문에, 이것은 조용히 빠뜨리는 대신 문서로 남겨집니다.
propose_fixes
대상을 다시 스캔하고 모든 발견 항목을 제안으로 반환하며, 패밀리별로 그룹화하고 네 가지로 나누어 에이전트가 "이 N개는 적용하고 이 M개는 건너뛰기"로 제시할 수 있게 합니다.
버킷 | 의미 |
|
|
|
|
|
|
|
|
{
"id": "agent.instruction-file-committed#1",
"ruleId": "agent.instruction-file-committed",
"applicability": "confirm",
"destructive": true,
"blastRadius": "file",
"remediation": {
"kind": "delete_file",
"path": "CLAUDE.md",
"bytes": 4200,
"summary": "Remove CLAUDE.md from the repository and from the index.",
"rebuttal": "This says how the repository was worked on, not who wrote any given line.",
"doNotApplyIf": "this file is a deliberate part of how the team works. In that case keep it and say so in the README, which answers the finding without deleting anything."
}
}대부분의 규칙은 의도적으로 manual을 제안합니다. 페이지 제목, 메타 설명, alt 속성, 브랜드 팔레트는 모두 기계가 즉시 생성할 수 있는 것들이며, 그 기계적 생성이 바로 이 코퍼스가 측정하는 결함입니다. 생성된 alt 텍스트가 가장 분명한 사례입니다. 그것은 검사기를 만족시키면서 아무도 보지 않은 이미지에 대해 스크린 리더 사용자에게 자신 있게 말합니다. 그래서 그 규칙들은 그 공백을 지목하고 멈춥니다.
이 도구 전체에 적용되는 두 가지 제약이 있습니다:
결정적 읽기만 패치를 제안할 수 있습니다. 탐지기가 확신을 기권하는 곳에서는 수정이 그것을 단언할 수 없습니다.
모든 수정은 규칙 자신의 반박과 명시적인
doNotApplyIf를 담습니다. 규칙의falsePositiveNote에서 주입되므로 수정과 그에 반대하는 논증이 서로 어긋날 수 없습니다.반대 증거는 결코 시정될 수 없습니다. 반대 발견은 산출물에 유리하게 작용합니다. 누군가 그것에 수정을 첨부하면 코퍼스는 로드 시 예외를 던집니다.
verify_fix
Before: 9 finding(s). After: 6. 3 no longer present, 6 still present, 0 newly present.
Score moved by -14 point(s).성공을 보고하지 않습니다. noLongerPresent는 해당 로케이터에서 더 이상 일치하지 않는 규칙들의 목록으로, 문제가 해결되었다는 주장이 아니라 재스캔에 관한 사실입니다. newlyPresent는 먼저 명시되고 regression: true를 설정합니다. 두 건을 해결하고 한 건을 새로 만드는 변경은 무언가를 깨뜨린 것이며, 순증가분만 보고하는 검증기는 그것을 개선이라고 부를 것이기 때문입니다. 이 세션에 대상에 대한 이전 판독이 없으면 아무것도 비교하지 않고 그렇게 말합니다. 첫 실행은 결코 '이상 없음'이 아닙니다.
루프
scan, propose, apply, verify. 핵심은 결코 보고서가 아니라 변화였습니다.
1. scan_codebase / scan_ui what is there, with a locator on every claim
2. propose_fixes the same findings as precise, caveated edits
3. YOUR agent applies them with its own edit tools, under the user's normal approval
4. verify_fix re-scan, and show which findings are no longer present3단계는 의도적으로 이 서버의 역할이 아닙니다. 에이전트에는 이미 편집 도구, 승인 프롬프트, 그리고 그것들을 신뢰하는 사용자가 있습니다. MCP 서버 안에 그 메커니즘의 두 번째이자 더 나쁜 복사본을 두는 것은 더 많은 코드, 더 많은 위험, 더 적은 통제를 의미할 것입니다.
이 저장소에 포함된 것
패키지 | 설명 |
| 서버. 다섯 가지 도구, stdio 바이너리, publish-shape 번들. |
| 규칙 계약, 채점 엔진, 증빙 기록, 캘리브레이션 하네스. |
| 코드 코퍼스: 규칙 19개, 레이블이 지정된 저장소 16개(인간 작성 10개, 생성 4개, 합성 2개). |
| 웹 코퍼스: 규칙 51개, 레이블이 지정된 페이지 9개(인간 작성 5개, 생성 4개). |
|
|
게시되는 npm 패키지는 자체 완결적입니다: npm run build는 esbuild로 세 개의 내부 워크스페이스 패키지를 dist/bin.js와 dist/index.js로 번들링하고 해당 타입 선언도 함께 포함하므로, tarball 안의 어떤 것도 게시된 적 없는 패키지를 가리키지 않습니다. @modelcontextprotocol/sdk와 zod는 실제 외부 의존성으로 유지되고, playwright는 선택적 피어 의존성으로 유지됩니다.
직접 빌드하기
npm install
npm run build # tsc -b, then the esbuild bundle
npm test # the rule suite, both calibration corpora, the security and FTC guards
npm run backtest # the gate: replay both frozen corpora and diff against the baselinenpm test는 브라우저를 절대 실행하지 않습니다. 웹 테스트는 저장된 아티팩트를 대상으로 실행되며, 이것이 바로 캘리브레이션을 재현 가능하게 만드는 이유이기도 합니다.
기여하기
먼저 CONTRIBUTING.md를 읽어 주세요. 짧게 요약하면, 이 저장소의 규칙은 산술로 뒷받침되는 고발이므로, 기준은 npm run backtest이지 "테스트가 통과하는 것"이 아닙니다. 모든 규칙은 반드시 발동되어야 하는 긍정 픽스처와 발동되어서는 안 되는 변형 픽스처를 함께 제공하며, 메타 스위트는 매 테스트 실행마다 둘 다 실행합니다. 명시되어 있고 확인 가능한 출처를 지닌 코퍼스 구성원을 추가하는 것은 규칙을 추가하는 것보다 더 큰 기여입니다.
라이선스
MIT입니다. LICENSE를 참조하세요.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Lints + auto-fixes how AI coding agents discover any new product. 24 rules, 6 tools, score 0-100.
Trust signals for AI agents: an open agent-readiness standard and developer tool guide. Read-only.
Browser-backed QA with evidence and fix-ready reports for coding agents.
Evidence-backed x402 web verification for AI agents, with auditable decisions for every condition.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to scan code for security and quality issues and receive machine-readable reports with suggested fixes and verification criteria.722MIT
- AlicenseNot gradedqualityBmaintenanceGives AI coding agents a closed-loop verification cycle for visual, audio, and video output, with enforcement hooks that make verification mandatory.Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI coding agents to record auditable work ledgers with evidence chains, from contract to proof packet, via MCP tools for file scanning, code review, and issue triage.48MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI coding agents like Claude and Cursor to audit websites for AI agent readiness, checking 199 rules across agentic discovery, content structure, and technical SEO.17Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Yuve21/slop-scorer-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server