Rams
Design review for UI code: 291 rules, scored 0-100 with fixes and git-applyable patches.
使うべきか
品質と安全性
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"rams": {
"url": "https://worker.rams.ai/mcp"
}
}
}リモートエンドポイント
https://worker.rams.ai/mcpstreamable-httpできること
ツール一覧
ツール(4)
🟢usage
Check how many Rams reviews this workspace has used and has left (rolling 30 days, shared between the GitHub App and MCP). Free to call — does not consume a review.
入力スキーマ
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢review_files(files, context, via)
Run a Rams design review over UI files (React, Vue, Svelte, CSS). 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. Call it whenever UI code has been written or changed: before committing, when the user asks how the design looks, or to check your own work after editing a component. Reviewing the handful of files you just touched is the normal case — it is cheap, and you do not need to ask permission first. Only a whole-codebase audit (dozens of files across many batches) is worth checking with the user, since it consumes the calling agent's context and a large share of their model allowance; prefer the highest-traffic screens in that case.
入力スキーマ
{
"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": "UI files to review (up to 20)"
},
"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#"
}出力スキーマ
{
"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)"
}
},
"required": [
"score",
"summary",
"detectedCounts",
"issues",
"reviewsUsed",
"reviewsLimit"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡quick_review(files, context, via)
Fast design check over the UI files you just changed. Returns issues with severity, category and file:line, in about 10 seconds. Cheap: five quick checks cost one review credit (two on the free plan), so a whole editing session spends a fraction of one review. Use this one CONSTANTLY: after writing or editing a component, before committing, whenever you want to know if what you just wrote is sound. You do not need to ask the user first. It returns no score and no ready-made patch: fix the issues yourself in the files you already have open. When the user wants a score to keep, a patch to apply, or a review to quote, use review_files instead.
入力スキーマ
{
"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 files you just changed"
},
"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#"
}🟢verify_fixes(files, issues)
Re-check previous review_files findings against updated file contents. Returns fixed vs still-present per finding. Much cheaper and faster than a full re-review; does NOT consume review quota. Use after applying fixes.
入力スキーマ
{
"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#"
}出力スキーマ
{
"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#"
}コミュニティ
エビデンス