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-)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/快速开始
- 安装 kitty mcp并使用您的mcp客户端(例如OpenCode、Claude Desktop)进行配置
- 发射 kitty实例:
result = kitty_launch(app_id="my-terminal", working_directory="/home/user")- 发送命令:
kitty_send_text(app_id="my-terminal", text="echo 'Hello World!'")
kitty_send_key(app_id="my-terminal", key="enter")- 获取输出:
output = kitty_get_scrollback(app_id="my-terminal", lines=5)
print(output["content"]) # Hello World!- 清理:
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 查看版本历史和发行说明。
