https://github.com/larock22/aider-mcp
WebSocket server that exposes Aider's AI coding capabilities through the Model Context Protocol (MCP) for programmatic access
https://github.com/larock22/aider-mcp
ai-coding aider mcp-server model-context-protocol openai typescript websocket
Last synced: 30 days ago
JSON representation
WebSocket server that exposes Aider's AI coding capabilities through the Model Context Protocol (MCP) for programmatic access
- Host: GitHub
- URL: https://github.com/larock22/aider-mcp
- Owner: larock22
- License: mit
- Created: 2025-06-03T17:33:48.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-06-03T17:33:50.000Z (about 1 year ago)
- Last Synced: 2025-11-17T03:03:07.558Z (7 months ago)
- Topics: ai-coding, aider, mcp-server, model-context-protocol, openai, typescript, websocket
- Language: TypeScript
- Homepage: https://aider.chat
- Size: 34.2 KB
- Stars: 0
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-mcp-servers - **aider-mcp** - WebSocket server that exposes Aider's AI coding capabilities through the Model Context Protocol (MCP) for programmatic access `typescript` `ai-coding` `aider` `mcp-server` `model-context-protocol` `npm install larock22/aider-mcp` (🤖 AI/ML)
README
# Aider MCP WebSocket Server
## Quick Start
This is a **real MCP (Model Context Protocol) server** that lets you control Aider programmatically via WebSocket. It's like having Aider as an API.
```bash
# 1. Install
npm install
cp .env.example .env
# Add your OPENAI_API_KEY=sk-... to .env
# 2. Run the MCP server (recommended)
npm run mcp
# 3. Test it
python3 test-debug.py
```
**What you get**: Send natural language commands to Aider, get back created/edited files and full responses. Each client gets isolated workspaces. Works with any MCP-compatible client (Claude Desktop, custom apps, etc.).
## Overview
A production-ready MCP (Model Context Protocol) wrapper that exposes Aider's functionality over WebSocket, enabling editor plugins and services to interact with Aider programmatically. This project provides **two server implementations**:
1. **`src/mcp-server.ts`** - **Real MCP Protocol Server** (Recommended)
- Implements standard JSON-RPC 2.0 MCP protocol
- Proper MCP methods: `initialize`, `tools/list`, `tools/call`
- Smart completion detection (waits for Aider to finish)
- Compatible with Claude Desktop and other MCP clients
2. **`src/index.ts`** - Custom WebSocket Wrapper
- Custom protocol with hello/welcome handshake
- Direct stdio pipe to Aider process
- Token-based authentication
## Architecture
```
┌─────────────────┐ JSON-RPC 2.0 ┌─────────────────┐
│ MCP Client │ ◄─────────────────────────► │ MCP Server │
│ (Any MCP app) │ WebSocket │ (mcp-server.ts)│
└─────────────────┘ └────────┬────────┘
│
│ spawn()
▼
┌─────────────────┐
│ Aider Process │
│ (CLI instance) │
└─────────────────┘
```
## Features
- **Full MCP Protocol Support**: Standard MCP methods and JSON-RPC 2.0
- **Multi-tenant Isolation**: One Aider child process per client
- **Automatic Completion Detection**: Waits for Aider to complete tasks
- **Isolated Workspaces**: Each session gets its own workspace directory
- **OpenAI API Integration**: Works with your existing OpenAI API key
- **Real-time Communication**: WebSocket-based bidirectional communication
- **Flexible Configuration**: Environment variables and CLI arguments
- **Structured Logging**: JSON logging with Pino
## Installation
```bash
# Clone and install
git clone
cd aider_mcp
npm install
# Configure environment
cp .env.example .env
# Edit .env and add your OpenAI API key:
# OPENAI_API_KEY=sk-...
```
## Prerequisites
- Node.js 18+
- [Aider](https://aider.chat) installed and available in PATH
- OpenAI API key
## Usage
### Running the Servers
```bash
# Run MCP protocol server (recommended)
npm run mcp
# Run custom WebSocket wrapper
npm run dev
# Production build
npm run build && npm start
```
### Testing
```bash
# Quick test of MCP server
python3 test-debug.py
# Full test with waiting
python3 test-mcp-wait.py
# JavaScript test client
node test-mcp-client.js
```
## MCP Protocol Communication
### Available Tools
The MCP server exposes these tools to clients:
1. **`aider_command`** - Execute natural language commands
```json
{
"name": "aider_command",
"arguments": {
"command": "create a REST API with Flask"
}
}
```
2. **`aider_add_file`** - Add files to Aider's context
```json
{
"name": "aider_add_file",
"arguments": {
"filename": "app.py"
}
}
```
3. **`aider_run_command`** - Run shell commands through Aider
```json
{
"name": "aider_run_command",
"arguments": {
"command": "npm test"
}
}
```
### Connection Flow
```javascript
// 1. Connect via WebSocket
const ws = new WebSocket('ws://localhost:8080');
// 2. Initialize MCP session
ws.send(JSON.stringify({
"jsonrpc": "2.0",
"method": "initialize",
"params": {
"protocolVersion": "0.1.0",
"capabilities": {},
"clientInfo": {
"name": "your-client",
"version": "1.0.0"
}
},
"id": 1
}));
// 3. Call tools after initialization
ws.send(JSON.stringify({
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "aider_command",
"arguments": {
"command": "create a Python hello world script"
}
},
"id": 2
}));
```
## Configuration
### Environment Variables
```env
# Required
OPENAI_API_KEY=sk-... # Your OpenAI API key
# Optional
PORT=8080 # WebSocket server port (MCP server default)
PORT=7011 # WebSocket server port (custom wrapper default)
AIDER_MODEL=gpt-4o-mini # Default model
WORKSPACES_DIR=./workspaces # Where to create project directories
LOG_LEVEL=info # Logging verbosity (debug|info|warn|error)
VALID_TOKENS=token1,token2 # Auth tokens for custom wrapper (empty = no auth)
```
### CLI Arguments
Override configuration at runtime:
```bash
# Custom port and workspace
npm run mcp -- --port 9000
npm run dev -- --port 8080 --workspaces ./custom-workspaces
# Override environment variables (custom wrapper only)
npm run dev -- --set AIDER_MODEL=gpt-4 --set LOG_LEVEL=debug
```
## Integration Examples
### Claude Desktop App
Add to Claude Desktop config:
```json
{
"mcpServers": {
"aider": {
"command": "node",
"args": ["/path/to/aider_mcp/dist/mcp-server.js"],
"env": {
"OPENAI_API_KEY": "your-key",
"AIDER_MODEL": "gpt-4o-mini"
}
}
}
}
```
### Custom MCP Client
```javascript
import { WebSocket } from 'ws';
class AiderMCPClient {
constructor(url = 'ws://localhost:8080') {
this.ws = new WebSocket(url);
this.requestId = 1;
this.setup();
}
async callTool(toolName, args) {
return this.sendRequest('tools/call', {
name: toolName,
arguments: args
});
}
sendRequest(method, params) {
const id = this.requestId++;
this.ws.send(JSON.stringify({
jsonrpc: '2.0',
method,
params,
id
}));
}
}
```
## Project Structure
```
aider_mcp/
├── src/
│ ├── index.ts # Custom WebSocket wrapper
│ └── mcp-server.ts # Real MCP protocol server
├── workspaces/ # Auto-generated client workspaces
├── test-*.py/js # Various test clients
├── package.json # Node.js dependencies
├── tsconfig.json # TypeScript configuration
├── .env # Environment configuration
└── README.md # This file
```
## Scripts
- `npm run mcp` - Start MCP protocol server (recommended)
- `npm run dev` - Start custom WebSocket wrapper with hot reload
- `npm run build` - Compile TypeScript to JavaScript
- `npm start` - Start production server
- `npm run lint` - Run ESLint
- `npm run typecheck` - Run TypeScript type checking
## Troubleshooting
### Common Issues
1. **"ConnectionRefusedError" or "Connect call failed"**
- Server isn't running. Start it with `npm run mcp`
- Wrong port. Check `.env` file (MCP default: 8080, Custom default: 7011)
2. **"Aider not found"**
```bash
# Install Aider
pip install aider-chat
# Verify installation
which aider
```
3. **"No API key" or Aider errors**
- Add your OpenAI API key to `.env`:
```
OPENAI_API_KEY=sk-proj-...
```
4. **Server returns too quickly / incomplete responses**
- Fixed in MCP server - waits for Aider to complete (3-second silence detection)
5. **"Tool execution timeout"**
- Normal for complex tasks
- The MCP server waits as long as needed
### Debug Mode
```bash
# Run with debug logging
LOG_LEVEL=debug npm run mcp
```
### Checking Results
Files created by Aider are stored in workspace directories:
```bash
# List all workspaces
ls -la workspaces/
# Check latest workspace
ls -la workspaces/mcp-*/
# View created files
cat workspaces/mcp-*/your-file.py
```
## Security Considerations
- **Isolated Workspaces**: Each client session gets its own directory
- **Authentication**: Custom wrapper supports token-based auth via `VALID_TOKENS`
- **Git Disabled**: Runs with `--no-git` by default for safety
- **API Key Security**: Never commit `.env` file
- **Production**: Consider running in Docker for additional isolation
## Performance Notes
- First request to Aider may take longer (model loading)
- Subsequent requests are faster
- The server maintains one Aider process per session
- Workspace cleanup is manual (delete old directories as needed)
## License
MIT