qmcp 是一个用于 q/kdb+ 集成的 Model Context Protocol (MCP) 服务器。
MCP 是由 Anthropic 创建的一个开放协议,使 AI 系统能够与外部工具和数据源进行交互。目前支持 Claude(桌面版和命令行版),但该开放标准允许其他 LLM 在未来采用它。
此仓库包含一个开源概念验证,展示了核心 qmcp 方法。Qython 翻译工具(可在 github.com/gabiteodoru/qython 获取)覆盖了大约 5% 的 q 语言,并提供评估和实验使用。
生产结果: 完整的 Qython 实现对 HumanEval 基准测试的失败率为 0.6%,比原生 q 开发提高了 10 倍的可靠性。详见完整评估:0.6% 失败率:解决 q/kdb+ 的 LLM 代码生成问题
商业许可: 如需访问完整的 Qython 实现并获得全面的语言覆盖,请联系 gabiteodoru@gmail.com
⚠️ 重要提示:对于 Windows 用户:为了实现最佳功能,强烈建议在 WSL(Windows Subsystem for Linux)中运行 MCP 服务器和您的 q 会话。这确保了服务器可以中断无限循环和意外生成的长时间运行查询。
在 Windows 上运行 MCP 服务器(不通过 WSL)会禁用基于 SIGINT 的查询中断功能,这对于在 AI 辅助开发会话期间逃离有问题的查询至关重要。
qmcp 被设计为向 AI 编码助手提供对 q/kdb+ 数据库的受控访问,以支持开发和调试工作流程:
服务器架构为 AI 辅助开发工作流程做出了明确的选择:
快速查询(< 异步切换超时) → 立即返回结果
慢速查询(> 异步切换超时) → 切换到异步模式
→ 自动中断(如果配置了中断超时)
这种架构为 AI 编码助手提供了有效的 q/kdb+ 访问,同时保持了开发工作流程所需的可预测和受控环境。
uv(轻量级安装)或 pip(完整安装)对于初次使用者,最快的方式是:
q -p 5001
claude mcp add qmcp "uv run qmcp/server.py"
claude
然后与 qmcp 互动:
> 连接到端口 5001 并计算 2+2
● qmcp:connect_to_q (MCP)(host: "5001")
⎿ true
● qmcp:query_q (MCP)(command: "2+2")
⎿ 4
直接使用 uv 运行(无需 pip 安装,启动可能较慢;适合初次尝试):
claude mcp add qmcp "uv run qmcp/server.py"
pip install qmcp
注意:考虑使用虚拟环境以避免依赖冲突:
python -m venv venv
source venv/bin/activate # 在 Windows 上:venv\Scripts\activate
pip install qmcp
# 一次性执行(每次下载依赖项)
uv run qmcp
# 或频繁使用时,先同步依赖项
uv sync
uv run qmcp
完成完整安装后,将服务器添加到 Claude CLI:
claude mcp add qmcp qmcp
添加到您的 Claude Desktop 配置文件:
{
"mcpServers": {
"qmcp": {
"command": "qmcp"
}
}
}
对于基于 uv 的安装:
{
"mcpServers": {
"qmcp": {
"command": "uv",
"args": [
"--directory",
"/绝对路径/qm_安装目录",
"run",
"qmcp"
]
}
}
}
完成完整安装后:
qmcp
轻量级安装时: 服务器会在 Claude CLI 使用时自动启动(无需手动启动)。
Q_DEFAULT_HOST - 默认连接信息格式:主机名、主机名:端口 或 主机名:端口:用户名:密码connect_to_q(host) 工具使用灵活的回退逻辑:
Q_DEFAULT_HOST
connect_to_q("myhost:5001:user:pass")Q_DEFAULT_HOST 结合使用或使用 localhost
connect_to_q(5001) → 使用 Q_DEFAULT_HOST 设置,端口为 5001Q_DEFAULT_HOST
connect_to_q() → 直接使用 Q_DEFAULT_HOSTQ_DEFAULT_HOST 的端口/认证或默认端口
connect_to_q("myhost") → 结合 Q_DEFAULT_HOST 设置生产就绪工具:
connect_to_q - 具有回退逻辑的稳定连接管理query_q - 执行具有智能异步超时控制的查询set_timeout_switch_to_async - 配置查询何时切换到异步模式set_timeout_interrupt_q - 配置何时发送 SIGINT 中断查询set_timeout_connection - 配置连接超时get_timeout_settings - 查看当前超时配置get_current_task_status - 检查正在运行的异步查询状态get_current_task_result - 获取已完成异步查询的结果interrupt_current_query - 发送 SIGINT 中断正在运行的查询实验性工具(Alpha):
translate_qython_to_q - ⚠️ 实验性:Python 类似语法到 q 的翻译器
do n times:、converge()、partial()、reduce()、arange()from functools import partial、from numpy import arangetranslate_q_to_qython - ⚠️ 实验性:Q 代码到 Python 类似的翻译器,带有 AI 解析
connect_to_q 工具(使用 q 的解析器).parseq 命名空间中创建变量和函数使用 MCP 服务器时请注意以下限制:
1!table 的操作在 pandas 转换过程中可能会失败meta 和 type 命令来确定实际数据类型对于类型检查,使用:
meta table / 检查表列类型和结构
type variable / 检查变量类型
如果您不是 Windows 用户,请跳过此部分。
由于在 Windows 上 Claude CLI 仅限于 WSL,但您可能希望使用 Windows IDE 或工具连接到您的 q 服务器,因此需要在 WSL2 和 Windows 之间进行适当的端口通信。
位置:C:\Users\{您的用户名}\.wslconfig
添加镜像网络配置:
# 镜像网络模式以实现无缝端口通信
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
从 Windows PowerShell/CMD(而不是从 WSL 内部)运行:
wsl --shutdown
# 等待几秒钟,然后重新启动 WSL
检查镜像网络是否激活:
ip addr show
cat /etc/resolv.conf
测试 WSL2 → Windows(localhost):
# 在 WSL2 中启动服务器
python3 -m http.server 8000
# 在 Windows 浏览器或 PowerShell 中
curl http://localhost:8000
测试 Windows → WSL2(localhost):
# 在 Windows PowerShell 中
python -m http.server 8001
# 在 WSL2 中
curl http://localhost:8001
问题:由于 Windows 服务绑定,端口 5000 的镜像网络支持有限。
根本原因:
svchost 服务绑定到 127.0.0.1:5000(仅限 localhost)端口 5000 通信矩阵:
端口 5000 的解决方案:
127.0.0.1:5000)