@aetherall/mcp-nvim-tmux
Supports recording Neovim sessions with asciinema for playback and AI-powered analysis.
Allows control of Neovim instances, including sending keystrokes, executing Vim commands and Lua code, capturing screen content, and editing files.
Provides AI analysis of recordings using configurable Ollama models, including summarization and pattern recognition.
Manages Neovim sessions inside tmux, enabling starting, stopping, and monitoring of detached sessions.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@aetherall/mcp-nvim-tmuxstart a session named dev and create a Python script greeting.py"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@aetherall/mcp-nvim-tmux
An MCP (Model Context Protocol) server that enables AI agents to control Neovim instances running in tmux sessions. Features session recording, AI-powered analysis, and a standalone bash script for direct usage.
Features
Session Management: Start/stop Neovim in detached tmux sessions
Remote Control: Send keystrokes, execute Vim commands and Lua code
Screen Capture: Capture current screen content with optional ANSI colors
Pattern Matching: Wait for specific patterns to appear on screen
Session Recording: Record sessions with asciinema including user input
AI Analysis: Analyze recordings with configurable AI models to understand user actions
Flexible Configuration: Support for multiple AI backends through environment variables
Related MCP server: can-see
Installation
Using Nix Flakes
# Run directly
nix run github:aetherall/mcp-nvim-tmux#nvimrun -- start mysession
nix run github:aetherall/mcp-nvim-tmux#mcpnvimtmux
# Install to profile
nix profile install github:aetherall/mcp-nvim-tmux#nvimrun
nix profile install github:aetherall/mcp-nvim-tmux#mcpnvimtmux
# Development shell
nix develop github:aetherall/mcp-nvim-tmuxFor Direct Usage
chmod +x nvimrun.shBasic Usage
# Start a session
./nvimrun.sh start my_session 80 24
# Start with recording
./nvimrun.sh start my_session 80 24 --record
# Send keys (for navigation and special keys)
./nvimrun.sh keys my_session i # Enter insert mode
./nvimrun.sh keys my_session Escape # Exit to normal mode
./nvimrun.sh keys my_session dd # Delete line
./nvimrun.sh keys my_session C-w l # Move to right window
# Type literal text (no escaping needed!)
./nvimrun.sh type my_session "Hello World! Special chars: $HOME != $(pwd)"
# Execute vim command
./nvimrun.sh cmd my_session "w hello.txt"
# Capture screen
./nvimrun.sh screen my_session
# Stop session
./nvimrun.sh stop my_sessionRecording and Analysis
# List recordings
./nvimrun.sh recordings
# Play a recording
./nvimrun.sh play session_name
# Display recording in AI-readable format
./nvimrun.sh cat session_name
# Analyze recording with AI
./nvimrun.sh analyze session_name
# Get a summary of the recording
./nvimrun.sh analyze session_name summarize
# Use custom AI models
MCP_NVIM_TMUX_ANALYZE_MODEL=qwen3:8b ./nvimrun.sh analyze session_name
MCP_NVIM_TMUX_CMD='gemini --model $MODEL' ./nvimrun.sh analyze session_nameLua Code Execution
For simple Lua code:
./nvimrun.sh lua my_session 'print("Hello")'For complex Lua code with special characters, use a temporary file:
# Save your Lua code to a file
cat > /tmp/script.lua << 'EOF'
print("Complex code with special chars: !@#$")
vim.api.nvim_buf_set_lines(0, 0, -1, false, {"Line 1", "Line 2"})
EOF
# Execute it
./nvimrun.sh keys my_session ":luafile /tmp/script.lua" EnterAdvanced Features
Colored Output
./nvimrun.sh screen my_session --color > output.ansiWait for Patterns
./nvimrun.sh wait my_session "Pattern to find" 5 # 5 second timeoutTips
Text Input: Use
typefor literal text (no escaping needed) andkeysfor special keysSpecial Keys: Common keys include
Enter,Tab,Escape,C-w(Ctrl+w),SpaceTiming: Some operations need time to complete. Add small delays with
sleep 0.1Clean Config: nvimrun starts Neovim with
-u NONEto avoid loading user configs
Monitoring Sessions
When you start a session, you can watch it in real-time from another terminal:
# Start a session (this will show the attach command)
./nvimrun.sh start my_session 80 24
# Output includes:
# To watch in another terminal: tmux attach -t 'my_session' -r -x 80 -y 24
# In another terminal, attach with preserved size
tmux attach -t my_session -r -x 80 -y 24
# To detach from watching: Press Ctrl+b, then dImportant: The -x and -y flags preserve the original terminal size, preventing resize issues that could disrupt automation.
Other useful tmux commands:
tmux ls- List all sessionstmux attach -t session_name- Attach with control (careful - may interfere)tmux kill-session -t session_name- Force kill a stuck session
Examples
Create and edit a Python file
./nvimrun.sh start dev
./nvimrun.sh keys dev i # Enter insert mode
./nvimrun.sh type dev "def main():\n print('Hello, World!')\n return 0"
./nvimrun.sh keys dev Escape # Exit insert mode
./nvimrun.sh cmd dev "w main.py"
./nvimrun.sh stop devRun Vim macros
./nvimrun.sh start macro_test
./nvimrun.sh keys macro_test "qa" "0dwA," Escape "q" # Record macro
./nvimrun.sh keys macro_test "5@a" # Run macro 5 times
./nvimrun.sh stop macro_testMCP Server Usage
Setup with Nix
No installation needed! Use directly with nix run.
Configuration for Claude Desktop
{
"mcpServers": {
"nvim": {
"command": "nix",
"args": ["run", "github:aetherall/mcp-nvim-tmux"]
}
}
}For Claude Code (CLI)
claude mcp add nvim -- nix run github:aetherall/mcp-nvim-tmuxAvailable MCP Tools
nvim_start- Start a new Neovim session (with optional recording)nvim_stop- Stop a Neovim sessionnvim_keys- Send keystrokes (for special keys like Enter, Tab, Escape, Ctrl sequences)nvim_cmd- Execute Vim commandsnvim_lua- Execute simple Lua codenvim_lua_file- Execute complex Lua code (multiline safe)nvim_screen- Capture screen contentnvim_edit- Open file at specific linenvim_type- Type literal text without special key interpretation (perfect for code and special chars)nvim_recordings- List available recordingsnvim_play- Play a recordingnvim_cat- Display recording in AI-readable formatnvim_analyze- Analyze recording with AI
Keys vs Type: When to Use Which
Use nvim_keys for:
Navigation:
["h", "j", "k", "l"],["g", "g"],["G"]Mode changes:
["i"],["Escape"],["v"],[":"]Special keys:
["Enter"],["Tab"],["C-w"],["Space"]Vim commands:
["d", "d"],["y", "y"],["p"]
Use nvim_type for:
Code with special characters:
"const url = 'https://example.com?id=${}';"Shell commands:
"docker run -it --rm -v $(pwd):/app node"Any literal text:
"Hello! This has $pecial ch@rs & quotes \"like this\""
Environment Variables
MCP_NVIM_TMUX_CMD- AI command template (default:ollama run $MODEL)MCP_NVIM_TMUX_MODEL- Default model for all AI operationsMCP_NVIM_TMUX_ANALYZE_MODEL- Model for analysis operationsMCP_NVIM_TMUX_SUMMARIZE_MODEL- Model for summarizationNVIMRUN_PROMPTS_DIR- Directory for prompt templates
Troubleshooting
Session exists error: Use
nvimrun.sh stop <session>firstLua errors: Check for special characters that need escaping
Screen not updating: Add small delays with
sleep 0.5AI analysis fails: Ensure ollama or your AI tool is installed and in PATH
Recording not found: Check pattern matches with
nvimrun.sh recordings
Documentation
For comprehensive documentation including all parameters and examples, see MCP_DOCUMENTATION.md.
License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Aetherall/mcp-nvim-tmux'
If you have feedback or need assistance with the MCP directory API, please join our Discord server