one deterministic engine · two products

The same engine grades your prose and guards your code.

app.slopgrade.ai/mcp · JSON-RPC 2.0 · Bearer
Tools
7
deterministic
Live keys
this account
Last call
none yet
Latency
$0 · deterministic
deterministic — no model called
The graderMCP · prose
you are here

Your agent grades and gates the prose it produces — before it ships.

7 toolsBearer$0 deterministic
The grader's walk
The firewallCI · code
GitHub Action

Your team guards the AI-written code, in your CI — not on MCP.

tenant isolationRLS · SQLi · SSRFadvisory free
The firewall cockpit → /ci
Reading your connection…
The gate loop · an example, played on every draft by your agent
detect → adapt → verify · 0 models, 0 inference cost
01 · the draftgate_text · maxScore 60
70Eblocked
The agent writes, then calls gate_text before returning the text.
refused with the reasons, never a silent « no » — the signals that cost the most →
02 · the 2 worst signalsexplain_score · contributions
Nominalization18
Cliché phrases14
The agent rewrites those two — not the whole text. The server says WHAT to cut; the agent is the model.
the 2 heaviest of the 8 signals · points out of 100 — the rest is already under the threshold
03 · re-gradedgate_text · maxScore 60
30Bpasses
30 < 60 → shipped. Same facts, less filler.
receipt · hash 0x60D2B891 · v3 — reproducible, re-checkable on the public receipt
Never lower a score by dropping facts: a text that passes but says less has failed. The gate measures filler, not length.

The walk · The same endpoint your agent calls — played here, in your session.

Pick a tool, paste a text: what you see is the real answer from app.slopgrade.ai/mcp, played in your session.

gate threshold: 60
HTTP · streamable

Connect

One line to paste. The key authenticates in a header — nothing to install, nothing to host.

Claude Code
claude mcp add --transport http slopgrade https://app.slopgrade.ai/mcp \
  --header "Authorization: Bearer sg_…"

Run it in the project. Claude Code stores the server in .mcp.json.

No key yet.

The raw key is shown once, never re-derivable. Revoking it cuts access at the very next call. Manage my keys

tools/list

The tools · 7 tools, 2 resources, 1 prompt. All deterministic — none of them calls a model.

None calls a model. Each tool states its input → output shape; gate_text is the gate — the call before returning.

gate_textthe gate
Pass or fail, in one call. This is the tool your agent calls before handing over a text.
{ text, maxScore? }{ pass, maxScore, worst, slopScore, grade, verdict, measurable, formulaVersion, hash }
word quota
grade_text
The grade alone: score 0-100, letter A-F, verdict, reproducible hash.
{ text, save? }{ slopScore, grade, verdict, measurable, formulaVersion, hash }
word quota
explain_score
Why that grade: what each of the eight signals contributed, in points.
{ text }{ slopScore, grade, verdict, measurable, formulaVersion, hash, contributions }
word quota
grade_batch
A batch in one pass, same order. To gate a fan-out of generations.
{ texts, save? }{ results }
word quota
ci_verdict
mcp.t_ci_verdict
{ repo?, sha? }{ repo, scanned, pass, verdict, threshold, runsSummary }
word quota
repo_gate_status
mcp.t_repo_gate_status
{ }{ total, capped, counts, repos }
word quota
firewall_findings
mcp.t_firewall_findings
{ repo }{ repo, scanned, gateLevel, gateEntitled }
word quota
slopgrade://formulaweights, grade bands, threshold and formula version.slopgrade://signalsthe eight signals, each with its weight and what makes it fire.prompt · tighten_draftthe tighten loop, ready to run.

The grader, hosted or local · · the same six tools both ways

Included in Business. Hosted counts your words; local runs offline, $0 inference.

Hosted

app.slopgrade.ai/mcp · API key in the header, your word quota, nothing to install.

HTTP streamableBearerquota compte
Local

node mcp/server.ts over stdio · offline, $0 inference, the same six tools — free.

stdiooffline$0

A client that cannot send a custom header — claude.ai web connectors — cannot connect yet: OAuth is not implemented.

The firewall · for code, in your CI
CI · GitHub Action
GitHub-only · OIDC

Guards AI-written code · the curated rulepack, not a linter

Turnkey, deterministic, $0 per PR. The firewall runs in your CI as a GitHub Action — your source never leaves it:

in your runnerstructural fingerprintthe shape of the code, never the sourceserver-side · closedclassification brainthe rule never shipsback in CIverdict + file:linepass or block, nothing else

What it guards · the classes, never how they're detected

124 guarded classes
Isolation & access
Cross-tenant · access-controlRLS · SECURITY DEFINERMass-assignmentCORS misconfigurationFirebase public-write rules
Injection
SQL injectionNoSQL injectionLDAP injectionXPath injectionUnrestricted uploadCommand / codeTemplate (SSTI)Path traversal / LFIXSSSSRFXXEOpen redirectPrototype pollutionReDoSCRLF / header injectionLog injectionPHP variable extractionSpEL injectionObfuscated code executionUnsafe reflectionOGNL injectionScript-engine injectionJNDI injectionEL injectionXSLT injectionNode vm code injectionNode require / import injectionPython import injectionGo command injection.NET command injectionGo SSRF.NET SSRFGo SQL injection.NET SQL injectionGo path traversal / LFI.NET path traversal / LFIGo open redirect.NET open redirectGo XSS.NET XSSGo LDAP injection.NET LDAP injectionGo XPath injection.NET XPath injectionGo template (SSTI).NET template (SSTI)Go log injection.NET log injectionGo zip-slip.NET zip-slipGo weak randomness.NET weak randomnessGo CORS misconfiguration.NET CORS misconfigurationGo NoSQL injection.NET NoSQL injectionGo unrestricted upload.NET unrestricted uploadGo unsafe reflection.NET unsafe reflectionLLM insecure code execution
Auth & secrets
JWT alg-none / bypassJWT algorithm confusionJWT secret in codeHardcoded secretsCSRF disabledInsecure session cookieHardcoded connection credentialCredential in a URLFramework session secretGo JWT secret in code.NET JWT secret in codeGo JWT algorithm confusion.NET JWT algorithm confusionGo insecure session cookie.NET insecure session cookie
Crypto & data
Weak cryptoStatic / hardcoded IVHardcoded crypto keyCommitted private keyInsecure deserializationJSON polymorphic typingWeak randomnessZip-slipInsecure temp-fileTLS-verify offSSH host-key check offTiming-unsafe MAC comparegRPC cleartext channelObsolete TLS version.NET obsolete TLS version.NET gRPC cleartext channel.NET hardcoded crypto key.NET static / hardcoded IVWeak key size (RSA/DSA)Go weak key size.NET weak key sizeWeak elliptic curveWeak DH parametersNull / no-encryption cipherInsecure ECB cipher modeInsecure RSA padding
Supply-chain & CI
Mutable deps · slopsquatCI/CD mutable pins
Infra & containers
Docker unpinnedIaC open-ingressK8s privilegeCloudFormationInsecure Electron configActuator over-exposureWorld-writable permissionsDebug mode in productionS3 public-write ACLAzure Blob public accessGCS bucket public accessAWS RDS publicly accessibleS3 public-access-block offHost-header auth offClickjacking (X-Frame-Options)

We publish WHICH classes, never HOW — the classification brain stays server-side (the moat). The catalogue grows; this list is pinned to the shipped rulepacks.

.github/workflows/firewall.yml
jobs:
  firewall:
    runs-on: ubuntu-latest
    permissions: { id-token: write, contents: read }
    steps:
      - uses: actions/checkout@v4
        with: { fetch-depth: 0 }
      - uses: maxor-tech/slopgrade-firewall@<sha>
        with:
          firewall-mode: "advisory"   # advisory | gate
          max-score: "60"

OIDC (id-token: write) proves the repo with no secret. Pin a full SHA, not a moving tag.

Advisory · free, everywhere

Reports cross-tenant and cross-class leaks on every repo, never blocking. No card, no slot.

Gate · blocks the merge

A public repo: the cross-tenant gate blocks for free. A private repo: a per-repo slot activates it, full file:line findings.

GitHub-only (the repo is proven by OIDC); elsewhere, the slop gate stays portable.