# I Built an MCP Server That Reviews Code Locally — No SaaS, No Uploads

> Source: <https://dev.to/goodjobwilliam/i-built-an-mcp-server-that-reviews-code-locally-no-saas-no-uploads-568a>
> Published: 2026-08-15 16:51:10+00:00

AI coding assistants ship code fast. But someone still has to review it. I wanted that "senior engineer second pair of eyes" to live inside my editor, run entirely on my machine, and work with whatever assistant I'm using today. So I built **MCP Code Review Server** — a Model Context Protocol (MCP) server that connects to Claude Code, Cursor, Cline, or any MCP client.

It exposes three tools to your AI assistant:

`review_code`

— paste any snippet and get a structured review`review_diff`

— review a git diff before you merge`review_file`

— point it at a local fileEach review returns findings with severity ratings (Critical / High / Medium / Low), file locations, and concrete fix suggestions.

The checks are the ones I kept catching my own assistants missing:

No signup, no API keys. It's on PyPI:

```
# Claude Code
claude mcp add code-review -- uvx aicraft-code-review

# Cursor / Claude Desktop — add to ~/.cursor/mcp.json
{
  "mcpServers": {
    "code-review": {
      "command": "uvx",
      "args": ["aicraft-code-review"]
    }
  }
}

# Or pip
pip install aicraft-code-review
```

That's it. Your assistant now has a review tool it can call whenever you ask.

I tried the hosted code-review tools first. They're good, but three things kept bothering me:

The server runs over stdio as a local process. Your code never leaves your machine. The only cost is the electricity.

A few things I'd do the same way again:

`uvx`

means users never even install it.`review_diff`

slots right into the "review before commit" habit that agents already have.Getting a server *working* is the easy part. Getting it *found* is the real work:

That's why I've been submitting the server to every directory with a review process, and keeping the repo metadata (`glama.json`

, `.mcp.json`

, `smithery.yaml`

, a `Dockerfile`

) in shape for their automated checks.

If you try it and hit a case it misses, open an issue — the rules are all configurable, and new checks are the fastest way this thing gets better.

*What would you want an in-editor code reviewer to catch that yours currently misses?*
