Atlas works with ESLint through ESLint's official MCP server, so Atlas reads real rule violations with their rule IDs and locations, then fixes them one rule at a time through diff review. Add it with atlas mcp add eslint -- npx -y @eslint/mcp@latest. Keep permission.edit set to ask so lint autofixes still pass through Atlas's diff review before they land.
What ESLint's official MCP server gives Atlas
ESLint ships an official MCP server, and adding it to Atlas takes 1 command: atlas mcp add eslint -- npx -y @eslint/mcp@latest. With it, Atlas reads real rule violations with their rule IDs and locations, so a lint fix targets a named rule at a known line rather than a general impression.
Rule IDs are the whole point. When Atlas can see that a violation is no-floating-promises at a specific file and line, the fix becomes a well-defined problem with a known correct shape. Without the rule ID, an agent is looking at a code smell and inventing a remedy, which is how lint cleanups turn into unrelated refactors. ESLint's official MCP server keeps Atlas anchored to what the linter actually reported, and because Atlas is terminal-native, the whole cycle of reading violations, proposing fixes, and reviewing diffs happens in the repo where the eslint config already lives.
The eslint --mcp flag and what it does since 9.26
The eslint --mcp flag does the same thing as adding @eslint/mcp@latest directly. Since ESLint 9.26, eslint --mcp just shells out to @eslint/mcp under the hood, so the two routes converge on the same server and you can pick whichever fits your project's tooling.
Knowing they are the same thing saves an argument. Some teams prefer registering the package explicitly with atlas mcp add eslint -- npx -y @eslint/mcp@latest, because the dependency is then visible in the command itself. Others prefer eslint --mcp because it goes through the ESLint binary the project already pins. Since ESLint 9.26 the flag delegates to @eslint/mcp anyway, so the tools Atlas sees are identical either way. Choose on style, not on capability, and be aware that on ESLint versions before 9.26 the delegation is not there to rely on.
If your config is eslint.config.ts, install jiti
If your config is eslint.config.ts, install jiti or the ESLint MCP server cannot load it. A TypeScript flat config needs a TypeScript loader, and jiti is what supplies it in 2026. Without jiti, the server fails to read the config and Atlas sees no rules at all.
This is the most common setup failure with ESLint and any MCP client, and the symptom is misleading. The server starts, Atlas connects, and then reports no violations, which looks like a clean codebase rather than a broken configuration. The cause is that eslint.config.ts is TypeScript and cannot be loaded without jiti present. Install jiti and the config loads, the rules resolve, and the violations appear. If your config is plain JavaScript, none of this applies. If the file ends in .ts and Atlas is suspiciously happy with your code, check for jiti first.
The fallback: npx eslint . --format json
Without the ESLint MCP server, Atlas can still shell out to npx eslint . --format json, which exits 1 when there are errors. The JSON formatter gives Atlas the same structured violations, and the exit code gives your CI pipeline an unambiguous pass or fail signal.
Keep this path in mind for environments where adding an MCP server is not worth the setup, such as a short-lived container or a CI job. Running npx eslint . --format json produces structured output that Atlas parses just as precisely as it would parse the MCP server's results, including rule IDs and locations. The exit code behavior is worth noting on its own: npx eslint . --format json exits 1 when there are errors, so a script that treats a nonzero exit as failure will correctly fail the build on a lint error, and Atlas can read the exit status as a signal too.
The daily workflow: clear one rule at a time
Ask Atlas to clear every no-floating-promises violation in src and present the fixes rule by rule. Scoping a lint cleanup to 1 rule and 1 directory is what keeps the resulting diff reviewable, because many fixes for a single known rule read far faster than the same number of assorted changes.
Rule-by-rule is the discipline that makes agentic linting practical. Every no-floating-promises fix has roughly the same shape, so once you have reviewed a few, you can move through the rest quickly with a clear sense of what correct looks like. Mix five rules together and every diff hunk requires fresh judgment, which is where reviewer fatigue sets in and bad fixes slip through. Name the rule, name the directory, and let ESLint's MCP server hand Atlas the exact set of violations that match. Then repeat for the next rule.
Keeping permission.edit set to ask
Keep permission.edit set to ask so lint autofixes still pass through Atlas's diff review before they land. As of 2026, an autofix is still a code change, and ESLint autofixes are not universally safe, so the review gate is worth keeping even for changes a linter proposed.
The temptation with a lint cleanup is to let the agent run unattended, because lint fixes feel mechanical. Most are. Some are not, and the ones that are not can quietly change behavior, particularly around promises and unused expressions where removing something the linter considers dead has real consequences. Setting permission.edit to ask means every edit Atlas makes surfaces as a diff you approve. Combined with a rule-by-rule scope, that review is fast, because the diffs are homogeneous and you already know the shape of the correct fix for the rule in question.
Setup
- 01Add the official server: atlas mcp add eslint -- npx -y @eslint/mcp@latest
- 02Or use the eslint --mcp flag, which since ESLint 9.26 just shells out to @eslint/mcp under the hood.
- 03If your config is eslint.config.ts, install jiti or the MCP server cannot load it.
- 04Without the server, have Atlas shell out to npx eslint . --format json, which exits 1 when there are errors.
- 05Ask Atlas to clear every no-floating-promises violation in src and present the fixes rule by rule.
- 06Keep permission.edit set to ask so lint autofixes still pass through Atlas's diff review before they land.
Frequently asked questions
- how to add the ESLint MCP server to Atlas
- Run atlas mcp add eslint -- npx -y @eslint/mcp@latest. ESLint ships an official MCP server, so Atlas reads real rule violations with their rule IDs and locations.
- what does the eslint --mcp flag do
- Since ESLint 9.26, eslint --mcp just shells out to @eslint/mcp under the hood, so it gives Atlas the same server as adding @eslint/mcp@latest directly.
- why does the ESLint MCP server report no violations
- If your config is eslint.config.ts, install jiti or the MCP server cannot load it. Without jiti the TypeScript config never loads, so no rules resolve.
- how do I run ESLint for an AI agent without an MCP server
- Have Atlas shell out to npx eslint . --format json. It gives the same structured violations and exits 1 when there are errors.
- can an AI agent fix all my no-floating-promises errors
- Yes. Ask Atlas to clear every no-floating-promises violation in src and present the fixes rule by rule, so the diff stays reviewable.
- should I let an AI agent apply ESLint autofixes automatically
- No. Keep permission.edit set to ask so lint autofixes still pass through Atlas's diff review before they land, since some autofixes change behavior.
- does ESLint have an official MCP server
- Yes. ESLint ships an official MCP server, @eslint/mcp. Add it to Atlas with atlas mcp add eslint -- npx -y @eslint/mcp@latest.
Try Atlas in your terminal
The terminal-native AI coding agent. Free core, single binary.
Install AtlasRelated guides
Atlas with Qwen3 8B (local via Ollama): The Laptop Offline Setup for 2026
Qwen3 8B (local via Ollama) is the easiest offline Atlas setup in 2026: roughly 5.2 GB at Q4_K_M, Free (self-hosted), and a thinking model on a laptop GPU.
Atlas with Qwen3-Next 80B-A3B Instruct: Setup, Cost, and Tradeoffs in 2026
Run Atlas, the terminal-native AI coding agent, on Qwen3-Next 80B-A3B Instruct: 128K tokens (131,072) of context at $0.50 per Mtok input and $2.00 per Mtok output.
Atlas with GPT-5.1 Codex: Plan First, Then Build in 2026
GPT-5.1 Codex in Atlas: a frontier model from OpenAI at $1.25 per Mtok input, $10 per Mtok output, built to execute an approved plan across a long tool chain.
Atlas with Amazon Nova Lite in 2026: 300K Context on Your AWS Bill
Amazon Nova Lite drives Atlas at $0.06 per Mtok input and $0.24 per Mtok output with a 300K token context, billed through IAM with no new vendor API key to manage.
Atlas with Qwen3.6 Plus: The Stable Million-Token Tier in 2026
Qwen3.6 Plus gives Atlas 1M tokens (1,000,000) of context at $0.50 per Mtok input and $3.00 per Mtok output, matching Qwen3.7 Plus while keeping 3.6 generation behavior.
Atlas with GLM-4.5-Air: The 106B Self-Hostable Cheap Slot in 2026
GLM-4.5-Air drives Atlas at $0.20 per Mtok input and $1.10 per Mtok output on a 128K tokens (131,072) window. A 106B total / 12B active MIT-licensed MoE.
Atlas with MiniMax-M2.5 in 2026: Reasoning Under a Dollar
MiniMax-M2.5 drives Atlas on a 230B efficient-MoE at $0.30 per Mtok input and $1.20 per Mtok output, with a 204,800 token context and 131,072 max output tokens.
Atlas with MiniMax-M2.7 in 2026: Agentic Reasoning at $0.30
MiniMax-M2.7 is MiniMax's March 2026 agentic 230B MoE. It runs Atlas at $0.30 per Mtok input and $1.20 per Mtok output with a 204,800 token context and 131,072 output.