Extensions - MCP Server
MCP Server
The GauntletCI MCP server gives your AI coding assistant direct access to behavioral change risk analysis. Ask Claude, Copilot, or Cursor to check your current commit for risks - the assistant calls GauntletCI locally and explains the findings in context with your question.
How it works
The Model Context Protocol is an open standard that lets AI assistants call external tools. The GauntletCI MCP server is a local Node.js process that listens on stdin/stdout. When your assistant calls the analyze_commit tool, the server runs gauntletci analyze in the directory you specify and returns the findings as structured text.
AI Assistant
Claude / Copilot / Cursor
MCP (stdio)
gauntletci-mcp
Node.js (local)
CLI spawn
GauntletCI CLI
.NET tool (local)
All processing is local. No code or diff content leaves your machine.
Prerequisites
- +Node.js 20 or later
- +GauntletCI CLI: dotnet tool install -g GauntletCI
- +An MCP-compatible AI assistant (Claude Desktop, Copilot, or Cursor)
Install the MCP server
$ npm install -g @ericcogen/gauntletci-mcp
Or clone and build from source for the latest changes:
$ git clone https://github.com/EricCogen/GauntletCI-MCP
$ cd GauntletCI-MCP && npm install && npm run build
Setup: Claude Desktop
Add the server to your Claude Desktop config file. On macOS the file is at ~/Library/Application Support/Claude/claude_desktop_config.json. On Windows it is at %APPDATA%\Claude\claude_desktop_config.json.
{
"mcpServers": {
"gauntletci": {
"command": "node",
"args": ["/path/to/gauntletci-mcp/dist/index.js"]
}
}
}Replace /path/to/gauntletci-mcp/dist/index.js with the absolute path to the built server. Restart Claude Desktop after saving.
Setup: GitHub Copilot (VS Code)
Create or update .vscode/mcp.json in your workspace. This scopes the server to projects that use it.
{
"servers": {
"gauntletci": {
"type": "stdio",
"command": "node",
"args": ["${workspaceFolder}/node_modules/.bin/gauntletci-mcp"]
}
}
}Setup: Cursor
In Cursor, open Settings > MCP and add the server configuration, or add it directly to ~/.cursor/mcp.json:
{
"mcpServers": {
"gauntletci": {
"command": "npx",
"args": ["-y", "@ericcogen/gauntletci-mcp"]
}
}
}Available tools
| Tool | Description | Parameters |
|---|---|---|
| analyze_commit | Run GauntletCI on HEAD and return findings as readable structured text. | workingDirectory (required), sensitivity (optional) |
| get_findings_json | Run GauntletCI and return the raw JSON result for programmatic processing. | workingDirectory (required), sensitivity (optional) |
| get_sarif | Run GauntletCI and return a SARIF 2.1.0 report for ingestion into GHAS or the VS Code SARIF viewer. | workingDirectory (required) |
The sensitivity parameter accepts strict, balanced (default), or permissive.
Example prompts
Once the MCP server is connected, you can ask your AI assistant directly about your commit. The assistant calls GauntletCI, parses the results, and responds in natural language.
You
Run GauntletCI on the repo at /Users/eric/projects/myapp and tell me what risks it found.
AI Assistant
I ran GauntletCI on the current HEAD commit. It found 3 issues: [Block] GCI0001 in OrderService.cs:44 - Behavior change without test coverage. SaveAsync was modified but no test file covering OrderService was updated. Add a test covering the new behavior before merging. [Block] GCI0003 in PaymentService.cs:112 - A new exception path was introduced but no call sites were updated to handle it. This may cause unhandled exceptions in production. [Warn] GCI0004 in Models/Order.cs:23 - Return type semantics changed from non-nullable to nullable. Callers may not be checking for null.
You
Can you explain why the GCI0003 finding is a problem?
AI Assistant
GCI0003 fires when a method now throws a new exception type that no existing call sites are prepared to catch. In this case, PaymentService.ProcessPayment now throws InvalidOperationException under a condition that didn't exist before. If callers swallow all exceptions or only catch specific types, this new exception will propagate up as an unhandled crash at runtime - even if all existing tests pass, because the tests exercise the happy path that doesn't trigger the new branch.
