终端控制服务器

Kitty MCP Server是一个生产级的MCP服务器,用于编程方式控制kitty终端实例,适用于自动化工作流程和终端管理。

  • by den-tanui
  • Python
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 den-tanui/kitty-mcp

使用说明

Kitty MCP服务器


A production-grade MCP server for controlling kitty terminal instances

A生产级 模型上下文协议(MCP) 控制服务器 小猫 终端实例。

概述

  • 以编程方式创建、管理和控制kitty终端实例
  • 将文本和组合键发送到kitty窗口
  • 捕获回滚缓冲区内容以进行命令输出分析
  • 适用于长时间运行的流程、日志分析和自动化工作流
  • 所有实例均已启动 --app-id 用于窗口识别

特性

  • 发射 具有唯一Unix套接字和应用程序id的kitty实例
  • 发送文本 和 组合键 到windows
  • 启动窗口 在现有实例中
  • 捕捉回滚 缓冲区内容物
  • 管理应用程序ID 用于窗口识别
  • 列表 和 关闭 实例
  • JSON结构化日志记录
  • 始终异步/等待
  • 全面的错误处理

安装

先决条件

  • Python 3.11+
  • 安装了kitty终端并位于PATH中
  • 紫外线 (推荐)或pip

从PyPI安装

# Install from PyPI
pip install kitty-mcp

# Install with uv (recommended)
uv add kitty-mcp

从源代码安装

# Clone repository
git clone https://github.com/your-username/kitty-mcp.git
cd kitty-mcp

# Install with uv
uv pip install -e ".[dev]"

# Or with pip
pip install -e ".[dev]"

用法

运行服务器

# Run directly
python -m kitty_mcp

# Or using the installed script
kitty-mcp

服务器通过stdio(标准输入/输出)进行通信,以实现MCP兼容性。

配置

在以下位置创建配置文件 ~/.config/kitty-mcp/config.json:

{
  "socket_dir": "/tmp/kitty-mcp",
  "max_instances": 10,
  "socket_permissions": "0600",
  "logging": {
    "level": "INFO"
  },
  "kitty": {
    "launch_timeout": 30,
    "command_timeout": 30
  }
}

配置选项:

  • socket_dir:Unix套接字目录(默认: /tmp/kitty-mcp-<uid>)
  • max_instances:最大并发实例数(默认值:10,最大值:100)
  • socket_permissions:套接字文件权限(默认值:“0600”)
  • logging.level:日志级别(调试、信息、警告、错误)
  • kitty.launch_timeout:启动kitty的超时时间(秒)
  • kitty.command_timeout:RC命令超时(秒)

可用工具

发射

启动启用远程控制的新kitty实例。

参数:

  • app_id (字符串,必填):实例的唯一标识符
  • working_directory (字符串,可选):工作目录
  • window_class (字符串,可选):窗口类(默认为app_id)

退货: {"success": true, "app_id": "...", "socket_path": "...", "pid": 1234}

send_text

将文本发送到kitty窗口。

参数:

  • app_id (字符串,必填):实例标识符
  • text (字符串,必填):要发送的文本
  • match (字符串,可选):窗口匹配条件

send_key

将组合键发送到小猫窗口。

参数:

  • app_id (字符串,必填):实例标识符
  • key (字符串,必填):组合键(例如,“ctrl+c”、“enter”)
  • match (字符串,可选):窗口匹配条件

launch_window

在现有的kitty实例中启动一个新窗口。

参数:

  • app_id (字符串,必填):实例标识符
  • command (array,必填):运行命令
  • cwd (字符串,可选):工作目录

get_scrollback

捕获回滚缓冲区内容。

参数:

  • app_id (字符串,必填):实例标识符
  • lines (整数,可选):行数(默认值:全部)
  • match (字符串,可选):窗口匹配条件

退货: {"success": true, "content": "..."}

关闭

关闭一个kitty实例。

参数:

  • app_id (字符串,必填):实例标识符
  • force (布尔值,可选):强制关闭

get_app_id

获取正在运行的kitty实例的应用程序id。

参数:

  • app_id (字符串,必填):实例标识符

退货: {"success": true, "app_id": "...", "configured_app_id": "..."}

set_app_id

更新实例的应用id跟踪。

参数:

  • app_id (字符串,必填):当前实例标识符
  • new_app_id (字符串,必填):新标识符

list_instances

列出所有活动的托管kitty实例。

退货: {"success": true, "instances": [...]}

发展

运行测试

# Run all tests
uv run pytest

# Run with coverage
uv run pytest --cov=kitty_mcp --cov-report=term-missing

# Run only unit tests
uv run pytest tests/unit/

# Run only integration tests (requires kitty)
uv run pytest tests/integration/

快速开始

  1. 安装 kitty mcp并使用您的mcp客户端(例如OpenCode、Claude Desktop)进行配置
  2. 发射 kitty实例:
    result = kitty_launch(app_id="my-terminal", working_directory="/home/user")
    
  3. 发送命令:
    kitty_send_text(app_id="my-terminal", text="echo 'Hello World!'")
    kitty_send_key(app_id="my-terminal", key="enter")
    
  4. 获取输出:
    output = kitty_get_scrollback(app_id="my-terminal", lines=5)
    print(output["content"])  # Hello World!
    
  5. 清理:
    kitty_close(app_id="my-terminal")
    

MCP客户端配置

开源代码

增添 .opencode/opencode.jsonc:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "kitty": {
      "type": "local",
      "command": ["kitty-mcp"],
      "enabled": true
    }
  }
}

克劳德桌面

增添 claude_desktop_config.json:

{
  "mcpServers": {
    "kitty": {
      "command": "kitty-mcp"
    }
  }
}

代码质量

# Type checking
mypy src/

# Linting
ruff check src/

# Format code
ruff format src/

建筑

┌─────────────────┐
│   MCP Client    │ (opencode/Claude Desktop)
│   (stdio IPC)   │
└────────┬────────┘
         │
         ▼
┌──────────────────────┐
│  KittyMCP Server     │ FastMCP framework
│  ├─ Tool handlers    │
│  ├─ State management │
│  ├─ Configuration    │
│  └─ Logging          │
└────────┬─────────────┘
         │ asyncio subprocess
         ▼
┌──────────────────────┐
│  Kitty RC Commands   │ kitten @ --to unix:/socket
└────────┬─────────────┘
         │ Unix socket
         ▼
┌──────────────────────┐
│  Kitty Instance      │ allow_remote_control=yes
│  └─ --app-id set     │
└──────────────────────┘

例子

终端自动化

# Launch and run commands
kitty_launch(app_id="automation", working_directory="/tmp")
kitty_send_text(app_id="automation", text="ls -la")
kitty_send_key(app_id="automation", key="enter")
output = kitty_get_scrollback(app_id="automation")
print(output["content"])

TUI应用程序控制

# Control nvim with complex workflows
kitty_launch(app_id="editor", working_directory="/project")
kitty_send_text(app_id="editor", text="nvim")
kitty_send_key(app_id="editor", key="enter")

# Navigate nvim interfaces
kitty_send_key(app_id="editor", key="space")
kitty_send_key(app_id="editor", key="p")  # Open projects
kitty_send_key(app_id="editor", key="enter")

多实例管理

# Launch multiple terminals
for i in range(3):
    kitty_launch(app_id=f"terminal-{i}", working_directory=f"/tmp/term-{i}")

# List all instances
instances = kitty_list_instances()
print(f"Active instances: {len(instances['instances'])}")

# Close all
for instance in instances["instances"]:
    kitty_close(app_id=instance["app_id"])

演出

  • 命令延迟:RC操作<100ms
  • 启动时间:MCP服务器初始化约0.5秒
  • 内存使用:10个活动实例小于50MB
  • 并行支持:最多100个实例(可配置)

安全

  • 套接字权限:默认情况下仅限用户(0600)
  • 命令验证:输入净化和验证
  • 错误处理:日志中没有敏感数据
  • 原子操作:安全状态持久性

贡献

欢迎投稿!请参阅 贡献.md 作为指导方针。

许可证

MIT许可证-请参阅 许可证 了解详情。

更新日志

看 更改日志.md 查看版本历史和发行说明。