Skip to main content
Glama
thrawn01

ast-grep MCP Server

by thrawn01
README.md
# MCP ast-grep Server

A Model Context Protocol (MCP) server that provides ast-grep integration for
Claude Code, enabling powerful structural code search and refactoring across
20+ programming languages.

## Features

- **AST-aware pattern matching**: Search and replace based on code structure, not just text
- **Multi-language support**: JavaScript, TypeScript, Python, Rust, Go, Java, C/C++, and more
- **Safe refactoring**: Dry-run mode by default for replacements
- **Flexible filtering**: Support for file globs and language-specific parsing
- **Rich output**: Contextual matches with diff previews for replacements

## Prerequisites

1. **Node.js** (>= 18.0.0)
2. **ast-grep CLI**: Install globally with `npm install -g @ast-grep/cli`
3. **Claude Code** with MCP support

## Installation

### Quick Install (Recommended)

Install both prerequisites and configure Claude Code in one go:

```bash
# Install ast-grep CLI
npm install -g @ast-grep/cli

# Clone and build the MCP server
git clone <repository-url>
cd mcp-ast-grep
npm install
npm run build

# Add to Claude Code using the MCP CLI tool
claude mcp install ast-grep node ./dist/index.js
```

### Manual Installation

#### Option 1: npm install (if published)

```bash
npm install -g mcp-ast-grep
claude mcp install ast-grep mcp-ast-grep
```

#### Option 2: Build from source

```bash
git clone <repository-url>
cd mcp-ast-grep
npm install
npm run build
```

## Configuration

### Using Claude MCP CLI (Recommended)

The easiest way to add this server to Claude Code is using the `claude mcp` CLI tool:

```bash
# Add the server (from built source)
claude mcp install ast-grep node /path/to/mcp-ast-grep/dist/index.js

# Or if installed globally
claude mcp install ast-grep mcp-ast-grep

# Verify installation
claude mcp list

# Remove if needed
claude mcp remove ast-grep
```

### Manual Configuration

If you prefer manual configuration, add the server to your Claude Code MCP settings:

#### macOS
`~/Library/Application Support/Claude/claude_desktop_config.json`

#### Windows
`%APPDATA%/Claude/claude_desktop_config.json`

#### Linux
`~/.config/claude/claude_desktop_config.json`

Add this configuration:

```json
{
  "mcpServers": {
    "ast-grep": {
      "command": "mcp-ast-grep",
      "args": []
    }
  }
}
```

Or if building from source:

```json
{
  "mcpServers": {
    "ast-grep": {
      "command": "node",
      "args": ["/path/to/mcp-ast-grep/dist/index.js"]
    }
  }
}
```

Restart Claude Code after adding the configuration.

## Usage

Once installed, Claude Code will have access to the `ast_grep` tool. Here are some examples:

### Basic Search

```typescript
// Find all console.log calls
ast_grep({
  pattern: "console.log($msg)"
})
```

### Search with File Filtering

```typescript
// Find console.log only in JavaScript files
ast_grep({
  pattern: "console.log($msg)",
  glob: "**/*.js",
  language: "javascript"
})
```

### Replace with Preview (Safe)

```typescript
// Preview replacing console.log with logger.info
ast_grep({
  pattern: "console.log($msg)",
  replacement: "logger.info($msg)",
  dry_run: true  // default
})
```

### Apply Changes

```typescript
// Actually apply the replacement
ast_grep({
  pattern: "console.log($msg)",
  replacement: "logger.info($msg)",
  dry_run: false
})
```

### Complex Patterns

```typescript
// Convert function declarations to arrow functions
ast_grep({
  pattern: "function $name($args) { $$$body }",
  replacement: "const $name = ($args) => { $$$body }",
  language: "javascript"
})
```

### Count Matches

```typescript
// Count occurrences
ast_grep({
  pattern: "console.log($msg)",
  mode: "count"
})
```

## Parameters

| Parameter | Type | Description | Required |
|-----------|------|-------------|----------|
| `pattern` | string | AST pattern to search for | ✅ |
| `replacement` | string | Replacement pattern (enables replace mode) | ❌ |
| `path` | string | File or directory to search (default: cwd) | ❌ |
| `glob` | string | File glob pattern (e.g., `**/*.js`) | ❌ |
| `language` | string | Target language for parsing | ❌ |
| `mode` | "search" \| "replace" \| "count" | Operation mode | ❌ |
| `context` | number | Lines of context around matches (0-20) | ❌ |
| `dry_run` | boolean | Preview mode (default: true for replacements) | ❌ |
| `head_limit` | number | Limit results to first N matches (1-1000) | ❌ |

## Supported Languages

JavaScript, TypeScript, Python, Rust, Go, Java, C, C++, C#, HTML, CSS, JSON, YAML, Bash, Lua, PHP, Ruby, Swift, Kotlin, Dart, Scala

## Pattern Syntax

ast-grep uses powerful pattern matching syntax:

- `$VAR` - matches any single AST node
- `$$$VAR` - matches multiple AST nodes (like function body)
- `console.log($msg)` - matches console.log with any argument
- `function $name($args) { $$$body }` - matches any function declaration

For more details, see the [ast-grep documentation](https://ast-grep.github.io/guide/pattern-syntax.html).

## Error Handling

The server provides helpful error messages for common issues:

- **ast-grep not found**: Install with `npm install -g @ast-grep/cli`
- **Invalid pattern**: Check ast-grep pattern syntax
- **File not found**: Verify the path parameter
- **Language not supported**: Use one of the supported languages listed above

## Development

```bash
# Install dependencies
npm install

# Run in development mode
npm run dev

# Build for production
npm run build

# Start production server
npm start
```

## Troubleshooting

### Tool not appearing in Claude Code

1. Verify installation: `claude mcp list` (should show "ast-grep")
2. Check that ast-grep CLI is installed: `ast-grep --version`
3. Restart Claude Code after configuration changes
4. If using manual config, verify the JSON syntax is correct
5. Check Claude Code logs for MCP connection errors

### Using the claude mcp CLI

```bash
# List all installed MCP servers
claude mcp list

# Check if ast-grep is installed
claude mcp status ast-grep

# Reinstall if there are issues
claude mcp remove ast-grep
claude mcp install ast-grep node /path/to/mcp-ast-grep/dist/index.js

# View Claude Code MCP configuration
claude mcp config
```

### Permission errors

Make sure the server has read/write access to the target files and directories.

### Pattern not matching

- Verify the pattern syntax using ast-grep CLI directly
- Check that the correct language is specified
- Use the playground at https://ast-grep.github.io/playground.html

## License

MIT

## Contributing

Contributions welcome! Please open issues for bugs or feature requests.

TDQS

A3.5/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no risk of confusion or overlapping purposes. The tool's description is clear and distinct by default.

Naming Consistency5/5

A single tool name provides no opportunity for inconsistency. The naming is trivially consistent.

Tool Count3/5

One tool is borderline for a server that claims to handle both search and refactoring across many languages. While the tool may be comprehensive, a single tool feels thin compared to typical servers with 3-15 tools.

Completeness3/5

The tool covers search and transformations, which are the core operations. However, there may be missing capabilities like pattern management or language-specific configurations, leading to notable gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues