Rams

Design review for UI code and live pages: quick checks, 0-100 scored reviews, fixes as patches

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
86%
Naming quality
92%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,972Tokens (tool definitions)
~5.6 KBTypical response size
Significant attention impact (2.32% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "rams": {
      "url": "https://worker.rams.ai/mcp"
    }
  }
}

Remote endpoints

https://worker.rams.ai/mcpstreamable-http

What it can do

Tool inventory

Tools (5)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢usage

Check how many Rams reviews this account has used and how many are left. Free to call. It does not use a review.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "description": "Plan name"
    },
    "used": {
      "type": "number",
      "description": "Review credits used in the window"
    },
    "limit": {
      "type": [
        "number",
        "null"
      ],
      "description": "Review credits included; null = unlimited"
    },
    "remaining": {
      "type": [
        "number",
        "null"
      ],
      "description": "Included credits left; null = unlimited"
    },
    "window": {
      "type": "string",
      "description": "\"lifetime\" (free reviews that do not renew), \"billing_cycle\" (an account set to pause at its limit) or \"rolling_30_days\""
    },
    "purchasedCredits": {
      "type": "number",
      "description": "Purchased review credits, spent automatically once the included ones run out"
    },
    "fullReviews": {
      "type": "object",
      "properties": {
        "used": {
          "type": "number"
        },
        "cap": {
          "type": "number"
        }
      },
      "required": [
        "used",
        "cap"
      ],
      "additionalProperties": true,
      "description": "Present when full reviews are capped; past the cap review_files returns a quick check"
    },
    "overageBilling": {
      "type": "boolean",
      "description": "Present where it applies: true = reviews past the limit keep running and are billed on the monthly invoice"
    },
    "pausedNow": {
      "type": "boolean",
      "description": "An account set to pause at its limit: true while paused"
    },
    "resumesAt": {
      "type": "string",
      "description": "An account set to pause at its limit: when the next billing cycle starts (ISO 8601)"
    }
  },
  "required": [
    "used",
    "limit",
    "remaining",
    "window",
    "purchasedCredits"
  ],
  "additionalProperties": true,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪review_files(files, context, via)

Full Rams design review of UI code (React, Vue, Svelte, HTML, CSS, SwiftUI). Returns a 0-100 score (criticals cap it: one caps at 59, two at 49, three or more at 39), issues with severity, category, file:line, and concrete fixes as patches. Call it once at the end: before a commit, or when the user wants a score or a final check. Pass each file with its real path, or for pasted code a path that fits it (pasted/Card.tsx). Each call uses one review credit. Reviewing a few files needs no permission. Ask the user before a whole-codebase audit (dozens of files), since it spends their allowance. For quick feedback while you work, use quick_review.

Input Schema

{
  "type": "object",
  "properties": {
    "files": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "File path, e.g. src/components/Button.tsx"
          },
          "content": {
            "type": "string",
            "description": "Full file content"
          }
        },
        "required": [
          "path",
          "content"
        ],
        "additionalProperties": false
      },
      "minItems": 1,
      "maxItems": 20,
      "description": "The UI code, one entry per file (up to 20): the real path, or for pasted code a path that fits it (pasted/Card.tsx), and the full code"
    },
    "context": {
      "type": "string",
      "description": "Short label for this review, e.g. the feature or branch name"
    },
    "via": {
      "type": "string",
      "description": "Set to \"rules\" when this call is made because of a standing instruction in a rules file (e.g. CLAUDE.md). Omit when a person asked for the review."
    }
  },
  "required": [
    "files"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "score": {
      "type": "number",
      "description": "0-100; confirmed criticals cap it — one at 59, two at 49, three or more at 39"
    },
    "direction": {
      "type": "string",
      "description": "What the change is trying to be — judgment before findings"
    },
    "summary": {
      "type": "string"
    },
    "detectedCounts": {
      "type": "object",
      "properties": {
        "critical": {
          "type": "number"
        },
        "serious": {
          "type": "number"
        },
        "moderate": {
          "type": "number"
        }
      },
      "required": [
        "critical",
        "serious",
        "moderate"
      ],
      "additionalProperties": false
    },
    "issues": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "severity": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "file": {
            "type": "string"
          },
          "line": {
            "type": "number"
          },
          "fix": {
            "type": "string",
            "description": "The fix as prose/code"
          },
          "patch": {
            "type": "string",
            "description": "RAMS-121: unified diff against the submitted file content, git-apply-able. Present only when the fix locates unambiguously."
          }
        },
        "required": [
          "severity",
          "category",
          "title",
          "message",
          "file",
          "line"
        ],
        "additionalProperties": false
      }
    },
    "reviewsUsed": {
      "type": "number"
    },
    "reviewsLimit": {
      "type": [
        "number",
        "null"
      ],
      "description": "null = unlimited (Team overage applies instead)"
    },
    "visualPair": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "One verified before/after of the top fix (image URLs), when one was rendered"
    },
    "visualFindings": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "additionalProperties": true
      },
      "description": "Findings seen in a render of the code, each with a crop URL"
    }
  },
  "required": [
    "score",
    "summary",
    "detectedCounts",
    "issues",
    "reviewsUsed",
    "reviewsLimit"
  ],
  "additionalProperties": true,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢quick_review(files, context, via)

Fast design and accessibility check of UI code (React, Vue, Svelte, HTML, CSS, SwiftUI). Returns the top issues with severity, category and file:line in about 10 seconds. Call it when the user pastes or uploads UI code, asks whether a design is good or accessible, or when you just wrote or changed a component, page or view. You do not need to ask first. Pass each file with its real path, or for pasted code a path that fits it (pasted/Card.tsx, pasted/index.html) and the full code. Five quick checks cost one review credit (two on the free plan). It reads code only, not screenshots or URLs. It returns no score and no patch: fix the issues yourself. For a score or patches, use review_files.

Input Schema

{
  "type": "object",
  "properties": {
    "files": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "File path, e.g. src/components/Button.tsx"
          },
          "content": {
            "type": "string",
            "description": "Full file content"
          }
        },
        "required": [
          "path",
          "content"
        ],
        "additionalProperties": false
      },
      "minItems": 1,
      "maxItems": 20,
      "description": "The UI code, one entry per file (up to 20): the real path, or for pasted code a path that fits it (pasted/Card.tsx), and the full code"
    },
    "context": {
      "type": "string",
      "description": "Short label, e.g. the component or feature name"
    },
    "via": {
      "type": "string",
      "description": "Set to \"rules\" when this call is made because of a standing instruction in a rules file (e.g. CLAUDE.md). Omit when a person asked for the review."
    }
  },
  "required": [
    "files"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "ran": {
      "type": "boolean",
      "description": "false when the check did not run (hourly limit, no credits left, engine failure) or came back unusable; message says why"
    },
    "issueCount": {
      "type": "number"
    },
    "issues": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "severity": {
            "type": "string",
            "description": "critical, serious or moderate"
          },
          "category": {
            "type": "string"
          },
          "file": {
            "type": "string"
          },
          "line": {
            "type": "number"
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "severity",
          "category",
          "file",
          "line",
          "message"
        ],
        "additionalProperties": true
      }
    },
    "message": {
      "type": "string",
      "description": "Present when ran is false: the reason, in words"
    }
  },
  "required": [
    "ran",
    "issueCount",
    "issues"
  ],
  "additionalProperties": true,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢verify_fixes(files, issues)

Re-check findings from an earlier Rams review against the updated code. Pass the new version of each file under the same path as before, plus the findings. Returns fixed or still present for each one. Free: it never counts against the user's quota. Use it after you fix the issues.

Input Schema

{
  "type": "object",
  "properties": {
    "files": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "File path, e.g. src/components/Button.tsx"
          },
          "content": {
            "type": "string",
            "description": "Full file content"
          }
        },
        "required": [
          "path",
          "content"
        ],
        "additionalProperties": false
      },
      "minItems": 1,
      "maxItems": 20,
      "description": "The updated UI files (same paths as the original review)"
    },
    "issues": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "severity": {
            "type": "string",
            "enum": [
              "critical",
              "serious",
              "moderate"
            ]
          },
          "category": {
            "type": "string"
          },
          "rule": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "file": {
            "type": "string"
          },
          "line": {
            "type": "number"
          },
          "current": {
            "type": "string",
            "description": "The flagged code from the original finding"
          }
        },
        "required": [
          "severity",
          "category",
          "file",
          "line"
        ],
        "additionalProperties": false
      },
      "minItems": 1,
      "maxItems": 30,
      "description": "The findings to verify, as returned by review_files"
    }
  },
  "required": [
    "files",
    "issues"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "fixed": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "file": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "severity": {
            "type": "string"
          }
        },
        "required": [
          "file",
          "severity"
        ],
        "additionalProperties": false
      }
    },
    "present": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "file": {
            "type": "string"
          },
          "line": {
            "type": "number"
          },
          "title": {
            "type": "string"
          },
          "severity": {
            "type": "string"
          }
        },
        "required": [
          "file",
          "line",
          "severity"
        ],
        "additionalProperties": false
      }
    },
    "allClear": {
      "type": "boolean",
      "description": "true when nothing remains, including no remaining criticals"
    }
  },
  "required": [
    "fixed",
    "present",
    "allClear"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪review_url(url, focus)

Review a live public web page by its URL, no code needed. Rams opens the page at desktop (1440px) and phone (390px) widths, measures the rendered page and looks at both screenshots, then returns the top design issues (severity, category, where on the page, and a fix in plain words) with a 0-100 score. Use it when the user names a site or a page: "review rams.ai with Rams", "how does my landing page look?". It takes up to a minute and uses one review credit. Public pages only: no sign-in pages, localhost or private addresses. It returns no code patches. If the user has the code for the page, use quick_review or review_files on those files instead.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2048,
      "description": "The page to review, e.g. https://rams.ai or rams.ai/pricing"
    },
    "focus": {
      "type": "string",
      "maxLength": 200,
      "description": "Optional: what to put first, e.g. \"mobile\", \"typography\", \"color\""
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "host": {
      "type": "string",
      "description": "The page that was reviewed (host only)"
    },
    "score": {
      "type": "number",
      "description": "0-100, what a designer sees in the two screenshots; one critical caps it at 59"
    },
    "scores": {
      "type": "object",
      "properties": {
        "desktop": {
          "type": "number"
        },
        "phone": {
          "type": "number"
        }
      },
      "additionalProperties": true
    },
    "summary": {
      "type": "string"
    },
    "detectedCounts": {
      "type": "object",
      "properties": {
        "critical": {
          "type": "number"
        },
        "serious": {
          "type": "number"
        },
        "moderate": {
          "type": "number"
        }
      },
      "required": [
        "critical",
        "serious",
        "moderate"
      ],
      "additionalProperties": true
    },
    "findings": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "severity": {
            "type": "string",
            "description": "critical, serious or moderate"
          },
          "category": {
            "type": "string"
          },
          "viewport": {
            "type": "string",
            "description": "desktop or phone"
          },
          "measured": {
            "type": "boolean",
            "description": "true = measured on the rendered page, false = seen in the screenshot"
          },
          "title": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "fix": {
            "type": "string"
          },
          "where": {
            "type": "string",
            "description": "The element, when one element owns the finding"
          },
          "instances": {
            "type": "number"
          }
        },
        "required": [
          "severity",
          "category",
          "viewport",
          "measured",
          "title",
          "message",
          "instances"
        ],
        "additionalProperties": true
      },
      "description": "Every finding, most severe first (the text shows the top 8)"
    },
    "reviewsUsed": {
      "type": "number"
    },
    "reviewsLimit": {
      "type": [
        "number",
        "null"
      ],
      "description": "null = unlimited"
    }
  },
  "required": [
    "host",
    "score",
    "scores",
    "summary",
    "detectedCounts",
    "findings",
    "reviewsUsed",
    "reviewsLimit"
  ],
  "additionalProperties": true,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools
verifiedversion not recorded5 tools
verifiedversion not recorded5 tools
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools