A Comprehensive MCP Server Plugin for Tabby Terminal
Connect AI assistants to your terminal with full control β 36 MCP tools including SFTP support
π Tabby-MCP is a powerful plugin for Tabby Terminal, bridging the gap between AI agents and your terminal environment. It provides a standardized MCP interface for AI to execute commands, manage tabs, and handle file operations securely.
Give your AI hands to work with.
|
|
|
|
Non-blocking confirmation dialogs for commands, raw input, and sensitive SFTP operations β’ Loopback-only server β’ Comprehensive logging
Safety model (v1.6.3): Pair Programming Mode gates
exec_command,send_input, keyboard-interactive authentication responses, and sensitive SFTP operations with a non-blocking approval dialog that automatically rejects after two minutes. Authentication response values are never shown in confirmation details. The dialog restores terminal focus to avoid Electron/xterm keyboard and IME issues. Read-only transfer-status tools and emergencyabort_commandremain available without approval. Network access is restricted to loopback (127.0.0.1), Origin validation is applied to both MCP transports, and the direct tool API is disabled by default.
Search for tabby-mcp-server directly in Tabby's built-in Plugin Manager:
- Open Tabby β Settings β Plugins
- Search for
tabby-mcp-server - Click Install
- Restart Tabby
No Node.js required! Downloads pre-built release from GitHub.
π macOS / π§ Linux
curl -fsSL https://raw.githubusercontent.com/GentlemanHu/Tabby-MCP/main/scripts/install.sh | bashOr download and run:
wget https://raw.githubusercontent.com/GentlemanHu/Tabby-MCP/main/scripts/install.sh
bash install.shπͺ Windows (PowerShell)
irm https://raw.githubusercontent.com/GentlemanHu/Tabby-MCP/main/scripts/install.ps1 | iexOr download and run:
Invoke-WebRequest -Uri https://raw.githubusercontent.com/GentlemanHu/Tabby-MCP/main/scripts/install.ps1 -OutFile install.ps1
.\install.ps1Requires Node.js 18+.
# Clone
git clone https://github.com/GentlemanHu/Tabby-MCP.git
cd Tabby-MCP
# Build & Install
bash scripts/build-and-install.shOr manually:
npm install --legacy-peer-deps
npm run build
# Then copy dist/ and package.json to Tabby plugins folder- Restart Tabby
- Go to Settings β MCP
- Start the MCP server
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"Tabby MCP": {
"type": "streamable_http",
"url": "http://127.0.0.1:3001/mcp"
}
}
}For clients that don't support SSE, use the STDIO bridge:
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"tabby-mcp-server": {
"command": "node",
"args": ["/path/to/Tabby-MCP/scripts/stdio-bridge.js"]
}
}
}VS Code / Other IDEs:
{
"mcp": {
"servers": {
"tabby-mcp-server": {
"type": "stdio",
"command": "node",
"args": ["scripts/stdio-bridge.js"],
"cwd": "/path/to/Tabby-MCP"
}
}
}
}Note: STDIO mode requires Node.js installed. The bridge script connects to the SSE server running in Tabby.
| Endpoint | URL | Protocol |
|---|---|---|
| Streamable HTTP | http://127.0.0.1:3001/mcp |
2025-03-26 (recommended) |
| Legacy SSE | http://127.0.0.1:3001/sse |
2024-11-05 |
| Health | http://127.0.0.1:3001/health |
- |
| Info | http://127.0.0.1:3001/info |
- |
| Tool | Description |
|---|---|
get_session_list |
List all terminal sessions with stable UUIDs and metadata |
exec_command |
Execute command with flexible session targeting |
send_input |
Send interactive input (Ctrl+C, etc) |
submit_keyboard_interactive_response |
Submit MFA, password, or other SSH keyboard-interactive responses |
get_terminal_buffer |
Read terminal buffer (defaults to active session) |
abort_command |
Abort running command |
get_command_status |
Monitor active commands |
focus_pane |
Focus a specific pane in split view |
get_session_environment |
Detect shell/REPL context (optional; disabled by default) |
New in v1.1: All terminal tools now support flexible session targeting:
sessionId(stable UUID, recommended)tabIndex(legacy, may change)title(partial match)profileName(partial match)- No parameters = use active session
| Tool | Description |
|---|---|
list_tabs |
List all open tabs with stable IDs |
select_tab |
Focus a specific tab (defaults to active) |
close_tab |
Close a tab |
close_all_tabs |
Close all tabs |
duplicate_tab |
Duplicate a tab |
next_tab / previous_tab |
Navigate tabs |
move_tab_left / move_tab_right |
Reorder tabs |
reopen_last_tab |
Reopen closed tab |
split_tab |
Split current tab (horizontal/vertical) |
| Tool | Description |
|---|---|
list_profiles |
List terminal profiles |
open_profile |
Open tab with profile |
show_profile_selector |
Show profile dialog |
quick_connect |
Smart quick connect (SSH/telnet/socket/serial) |
Requires
tabby-ssh. If it is not installedβor SFTP is disabled in Settingsβall 12 SFTP tools are omitted for new MCP sessions. With Pair Programming confirmation enabled, directory listing, metadata reads, file reads/writes, transfers, deletes, renames, directory creation, and transfer cancellation require approval.
Basic Operations:
| Tool | Description | Key Parameters |
|---|---|---|
sftp_list_files |
List remote directory | path |
sftp_read_file |
Read remote file (text) | path |
sftp_write_file |
Write text to remote file | path, content |
sftp_mkdir |
Create remote directory | path |
sftp_delete |
Delete remote file/directory | path |
sftp_rename |
Rename/move remote file | sourcePath, destPath |
sftp_stat |
Get file/directory info | path |
File Transfer (supports sync/async):
| Tool | Description | Key Parameters |
|---|---|---|
sftp_upload |
Upload local file β remote | localPath, remotePath, sync |
sftp_download |
Download remote β local file | remotePath, localPath, sync |
sftp_get_transfer_status |
Query transfer progress | transferId |
sftp_list_transfers |
List all transfers | status (filter) |
sftp_cancel_transfer |
Cancel active transfer | transferId |
Transfer Modes:
sync=true(default) waits for completion.sync=falsereturns immediately withtransferId.Size Limits: Configurable in Settings β MCP β SFTP.
| Setting | Description | Default |
|---|---|---|
| Port | MCP server port | 3001 |
| Start on Boot | Auto-start server | true |
| Pair Programming | Confirm commands, raw input, and sensitive SFTP operations | true |
| Confirm SFTP Operations | Apply the approval dialog to sensitive SFTP operations (send_input always follows command confirmation) |
true |
| Session Tracking | Use stable UUIDs | true |
| Background Execution | Run without focus | false |
| SFTP Enabled | Enable SFTP tools | true |
| Environment Detection | Expose get_session_environment |
false |
| Direct Tool API | Enable compatibility endpoint /api/tool/:name (manual config only) |
false |
Enable this mode to allow MCP commands to run without switching focus to the terminal. This lets you continue working on other tabs while AI executes commands in the background.
Settings β MCP β Background Execution
β οΈ Risks:
- You won't see commands executing in real-time
- If you type in the target terminal while AI is running, input will conflict
- For split panes, commands go to the
sessionIdtarget, not the focused pane- Dangerous commands could run without you noticing
β Recommended: Keep Pair Programming Mode, confirmation dialogs, and file-operation confirmation enabled. The server binds only to
127.0.0.1; the direct/api/tool/:namecompatibility API is disabled by default.
| Platform | Status | Notes |
|---|---|---|
| macOS | β Tested | Fully functional |
| Windows | Should work β please report issues | |
| Linux | Should work β please report issues |
Note: This plugin has been developed and tested on macOS. Windows and Linux support should work but is unverified. Community testing and feedback welcome!
This project was created almost entirely by AI (Claude/Gemini) through pair programming.
The human's role was primarily to provide requirements and test the results.
This project builds upon the work of tabby-mcp-server by @thuanpham582002.
Improvements over the original:
| Feature | Original | This Project |
|---|---|---|
| MCP Tools | 4 | 35 |
| Tab Management | β | β |
| Profile/SSH | β | β |
| SFTP Support | β | β |
| Stable Session IDs | β | β |
| Streamable HTTP | β | β |
| Init Bug | Has issue | β Fixed |
| Install Script | Manual | β One-liner |
β οΈ Prerelease, not yet published to npm. Install it from the GitHub prerelease and please report anything that misbehaves on the referenced issues.Keyboard-interactive authentication has been exercised end to end in a real Tabby session β MFA submission through to the Jumpserver asset menu, on Tabby 1.0.229 and 1.0.235 for macOS. The rc.1 fixes below β dialog focus restoration, live SFTP transfer cancellation, and multi-instance port handover β have not been exercised by hand yet and still need testing.
- Added
submit_keyboard_interactive_responsefor SSH keyboard-interactive authentication, including MFA/TOTP prompts (PR #8, thanks @plane636).send_inputwrites to the terminal PTY and cannot reach Tabby's authentication panel. Pair Programming confirmation shows only the response count, never credential values. get_session_listnow reportssshConnected,keyboardInteractivePending, and non-secret prompt metadata.- Fixed a startup crash on Tabby 1.0.235 where
ConfigService.storewas not yet available during Angular service construction, which pushed Tabby into third-party-plugin safe mode. - Tool count is now documented accurately: 36 total (35 normally visible;
get_session_environmentis optional and disabled by default).
- Fixed Issue #9: Pair Programming approval now covers
send_inputand sensitive SFTP operations; transfer cancellation now stops the underlying transfer. - Fixed Issue #7: replaced blocking browser dialogs with a non-blocking focus-restoring dialog and made command focus honor the Auto-focus setting.
- Fixed Issue #5: loopback-only bind, startup retry, stale-instance detection, and authenticated same-install port handover.
- Fixed Legacy SSE JSON body handling for SDK 1.25.2, session cleanup, stale Streamable HTTP session handling, Origin validation, fish active environment probes, SFTP locator consistency, and STDIO reconnect/framing behavior.
- Pinned
@modelcontextprotocol/sdkto 1.25.2, committedpackage-lock.json, and added typecheck/smoke/build quality gates.
See CHANGELOG.md for the complete version history.
See CONTRIBUTING.md for guidelines.
MIT License - see LICENSE
Made with β€οΈ by AI and GentlemanHu
β Star this repo if you find it useful!
