The eleven tools

Every tool the RepoGates MCP server gives an AI agent, what it answers, and the hard gate an organisation can require.

The tools

Eleven tools, deliberately without a shell, a filesystem or a write verb — the one that spends anything, deep_scan, spends a credit only with your per-call yes. Every tool raises an error rather than returning a reassuring empty result when RepoGates cannot answer — "cannot answer" must never be rendered as "safe".

ToolOne line
check_repo(owner, repo) Verdict, 0–100 trust score, how many of the 22 checks passed, the findings that fired, and the four dimension verdicts — open, clone, install, agent — each with your profile's action; and what changed since the previous assessment on record (the timeline).
check_owner(login) Assesses a GitHub account — age, what it publishes, and its worst-scoring repositories.
check_download_url(url) Resolves a GitHub URL — repo page, Download-ZIP link, release asset, raw file — to its repository and assesses it. Refuses opaque CDN links rather than guessing.
assert_allowed(owner, repo) Hard gate: succeeds quietly or raises. See below.
check_skill(ref, strict) An AI-agent skill or a Claude Code plugin through the 15 skill checks — the SKILL.md frontmatter and text, the scripts beside it, a plugin's hooks, MCP servers, monitors and settings — with the source repository through the 22 as source. Takes owner/repo, owner/repo/skills/name, a skills.sh listing, name@claude-plugins-official (or @claude-plugins-community, @claude-code), name@owner/repo for any other marketplace, or @owner/slug for ClawHub (parsed, not assessed on this tier — never a pass). strict=true raises on BLOCK or a campaign hit as assert_allowed does. /plugin install typed inside Claude Code is a slash command the hook never sees; gate the plugin here first. A PASS is on the text read, not on the skill having been run.
preflight(line) Judges the exact clone or install command line before it runs — parsed on the server, never executed. Raises on a blocked repository; otherwise returns allow or ask with the repositories it found, each with its findings, the checks that did not run, with why, and its four dimension verdicts; the reason ends with the one the verb is about (clone: REVIEW, install: PASS). A registry package on the line (npm install express, pip install flask) is resolved to the source repository it declares. Advisory unless the Claude Code plugin's hook is installed.
deep_scan(owner, repo, confirm) Scans the repository's files — malware, secrets, dependencies, behaviour, in an isolated sandbox, about a minute — before a clone or install. Spends scan credits by the repository's size (most scans are one); does nothing without confirm=true, which the agent may pass only after you said yes. Returns reused: true, and spends nothing, when a scan of the same repository finished within the reuse window, and reuse_window_ends_in_s says how long a repeat stays free. Raises on a scan verdict of BLOCK.
deep_scan_status(scan_id) The result of a scan that was still running.
active_campaigns() Supply-chain campaigns and newly exploited CVEs active right now, with a coverage map for GitHub, Hugging Face, VS Code Marketplace, Docker Desktop, GitLab and agent skills: an active count or quiet for each, its intelligence page, and when the sources were last polled. A quiet platform is stated, never filled.
last_checkup() The account's most recent agent check-up, as stored — the run's score, grade and action, each agent as inventoried, detected-only (no score) or absent, the items that need attention, the findings that decided it with their fixes, and when it ran. Read-only: the check-up itself runs on your machine (/repogates:checkup or the CLI) and sends RepoGates identifiers, never contents; no tool on this server reads a machine. Raises when no check-up is recorded — that is not a pass.
repogates_status() Proves the connector works and restates the scope limit.

The server also exposes a resource, repogates://checks — the roster of all 22 checks, so a model can cite why a check exists rather than guess — and a prompt, vet_before_clone, that tells an agent to gate a named repository before touching it. Findings are capped per call so a hostile repository cannot flood an agent's context.

assert_allowed — the hard gate

Prose is negotiable to a language model; a tool error is not. That is the whole design of assert_allowed: called before a clone, download or install, it returns a short success string when the repository is acceptable — and raises a tool error when it is not, so the agent's step fails instead of receiving text it can talk itself past.

OutcomeWhen
ALLOWED Verdict PASS — returns the score and verdict.
PROCEED WITH CAUTION Verdict REVIEW — returns, telling the agent to surface what fired to the user before continuing.
NOT ASSESSED The repository could not be fully examined — returned as explicitly unchecked, never as approved.
Raises: BLOCKED A finding your policy profile blocks (the same profiles.json the extension applies — a devcontainer command on the host is CRIT and a warning, hidden Unicode is a block), a listing in an active malware campaign, a response with no real verdict, or the verdict service being unreachable. It fails closed — no answer is not permission.

This is the verb an organisation can mandate. A line for your agent standards document:

Before cloning, downloading, installing from, or recommending a GitHub
repository, call RepoGates assert_allowed(owner, repo). If it raises,
stop and report the reason — do not fetch the repository by another
route, and do not retry hoping for a different answer.

The repogates-vetting agent skill packages exactly this behaviour for platforms that support skills, including refusing to continue silently when the connector is missing.

What it does not see. RepoGates gates downloads made through the browser. It does not see git clone, package managers or curl — outside Claude Code with the RepoGates plugin, whose hook refuses a clone or install that names a blocked repository on the command line, before it runs. The hook sees Bash tool calls in that one client and nothing else. VS Code and Docker Desktop extensions and agent skills are answered through the MCP server and the plugin, not in the browser.