请在当前 agent 使用的 MCP 服务列表中安装 KSword MCP(https://github.com/KSwordDEV/MCP)。
1. 询问使用 GUI、CLI 还是两者,以及是否下载 KSword。GUI 模式询问未运行时自动启动还是失败;仅在自动启动时询问管理员权限,由我确认 Windows UAC。
2. 使用 ksword-mcp 的 pip/npm 包及独立 Python 环境,核验入口和 Ksword5.1.exe / KswordCLI.exe 的实际绝对路径;CLI 不自动启动 GUI 或提权。
3. 确认实际客户端和原生配置落点;注册前保留可恢复基线,只改 KSword 条目,核验其它配置不变,不猜原值或覆盖并发修改。
4. 按我的回答配置启动和权限策略,不自行改变选择、不重启已有 KSword。
5. 分别验证并报告原生注册、独立 stdio 工具发现、当前 agent 工具加载;GUI 使用 hello/pages/snapshot,CLI 使用 status/help 做只读连接验证。
6. 条件不满足时继续完成独立安装与发现,明确未通过项、具体错误和用户所需操作;基线保留到验收完成。
7. 验证不执行原始 IOCTL、驱动装卸、结束进程或内存写入,不创建提权代理或代答 UAC。
完整安装指南:https://raw.githubusercontent.com/KSwordDEV/MCP/main/INSTALL_FOR_AGENTS.md
KSword MCP
通过 stdio 提供 KSword 的 Qt 对象桥、原生 CLI 和原始驱动 IOCTL 工具。使用 官方 MCP Python v1 SDK,GUI、CLI 与 sidecar 是独立进程;CLI 模式可以单独运行。
pip / npm 安装
需要本地 Windows、Python 3.10+ 和兼容的 KSword。包提供 MCP 服务,KSword 主程序、CLI 和驱动从 官方 Releases 获取。下载和 GUI 启动策略由用户选择。
pip 使用独立虚拟环境:
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install ksword-mcp
.\.venv\Scripts\ksword-mcp.exe --ksword-cli-exe "C:/Applications/KSword/Release/KswordCLI.exe"
npm 需要 Node.js 18+ 和已有 Python 3.10+;入口在版本化用户缓存中准备独立 Python 环境,运行同一份 Python 实现。先完成 --prepare,再注册到 MCP 客户端,避免初次依赖安装耗尽客户端握手时间:
npx --yes ksword-mcp@0.1.0 --prepare
npx --yes ksword-mcp@0.1.0 --ksword-cli-exe "C:/Applications/KSword/Release/KswordCLI.exe"
需要指定解释器时设置 KSWORD_MCP_PYTHON 为真实完整路径;KSWORD_MCP_CACHE_DIR 可指定独立缓存的绝对路径。默认缓存为用户主目录下 .cache/ksword-mcp/<version>。安装诊断走 stderr,stdout 保留给 MCP;npm 不改系统 Python 或 MCP 客户端的依赖。
使用这些选项时,在 MCP 服务配置的 env 字段显式传入,并让 --prepare 使用同样的值;部分客户端不会继承 PowerShell 中的环境变量。
包与源码入口都支持以下参数:
| 模式 | 参数与工具 |
|---|---|
| CLI | --ksword-cli-exe C:/.../KswordCLI.exe,4 个 CLI/IOCTL 工具,GUI 无需运行 |
| GUI + CLI | --ksword-exe C:/.../Ksword5.1.exe,11 个 GUI 工具及4个 CLI/IOCTL 工具;默认寻找同目录 KswordCLI.exe,可显式指定 CLI 路径 |
| 指定 GUI 实例 | --pid 12345,11 个 GUI 工具;添加 --ksword-cli-exe 可同时启用 CLI |
--version 输出包版本;--help 查看参数。CLI 每次调用创建一次原生命令进程,继承 MCP 服务的权限,不自动启动 GUI、装载驱动或申请管理员权限。GUI 的 UAC 授权范围保持为对象桥,CLI 的权限条件按原生命令帮助处理。
启动
从主仓库源码运行时,在独立环境安装整个包:
python -m pip install ./tools/ksword_mcp
可从主程序顶部“设置 → MCP”即时启用或停止对象桥;默认关闭。“随程序启动”点击设置窗口底部“应用”后保存,下次启动生效。“取消”放弃待保存偏好和路径,本次启停是即时操作。也可用 --mcp 仅对本次启动启用桥。如果主程序已有运行实例,该参数不会改变旧实例的状态,应直接在旧实例的 MCP 设置页启用,或先正常关闭旧实例再启动:
$kswordProcess = Start-Process -FilePath '.\Ksword5.1\x64\Release\Ksword5.1.exe' -ArgumentList '--mcp' -PassThru
$kswordProcess.Id
以控制台输出的实际 GUI PID 为准。连接前核对运行进程,避免填入 Launcher 或已退出进程的 PID。手动运行 sidecar 的命令如下;它会等待标准输入中的 MCP 请求,通常应由 MCP 客户端代为启动:
python tools\ksword_mcp\server.py --pid 12345
固定 PID 模式下,GUI 重启后需要更新参数。推荐改用 --ksword-exe 按明确的完整映像路径寻找当前实例;默认不自动启动,用户明确选择 --startup-policy auto 后,首次工具调用才会尝试启动。sidecar 不下载主程序、不安装驱动,也不修改 KSword 设置。
MCP 设置页显示实际监听状态、当前 PID 和命名管道,可填写 Python 命令与 sidecar 脚本路径,并预览/复制下面两种客户端配置。预览使用当前输入,路径在点击“应用”后保存。主程序按标准 Release 位置自动寻找仓库中的 tools/ksword_mcp/server.py;安装位置不同或发行目录缺少 sidecar 时可手动选择。复制前会检查命令非空和脚本存在,但不会验证或安装 Python 依赖,也不会修改客户端全局配置。
新版配置预览在 exe 同目录存在 KswordCLI.exe 时追加 CLI 路径,两种格式共用同一参数数组。已有客户端条目需重新注册或手动追加 --ksword-cli-exe 才会加载这4个新工具;先读取原生 help 核验 CLI 版本。
“设置 → MCP → 操作日志”显示最近1000条服务、连接、请求和操作派发记录,支持共享编辑器的搜索、复制、导出以及即时清空。日志在当前主程序生命周期内保留,重开设置或启停 MCP 不会丢失,退出后不写入磁盘。记录包含时间、客户端 PID、白名单方法、请求 UUID、调用回执和机器错误码;输入值、读取结果、未知方法原文和非 UUID 请求身份不进入日志。成功的操作状态轮询不重复刷屏。dispatched 仍只表示控件调用派发,不能作为业务完成依据。
Agent 安装与启动策略
README 顶部代码块和 agent_install_prompt.txt 是可复制给 agent 的短提示词;完整、独立的安装步骤在 INSTALL_FOR_AGENTS.md。agent 应先读取该文件,再收集用户的下载、启动和权限选择,不能用配置示例代替用户回答。
推荐使用程序路径模式,避免每次重启修改 PID:
python server.py --ksword-exe "C:/path/to/Release/Ksword5.1.exe" --startup-policy fail
python server.py --ksword-exe "C:/path/to/Release/Ksword5.1.exe" --startup-policy auto
python server.py --ksword-exe "C:/path/to/Release/Ksword5.1.exe" --startup-policy auto --startup-elevated
fail:默认策略,主程序未运行时返回ksword_not_running,不启动任何进程。auto:只有工具调用发生后才启动;stdio 初始化和工具发现不启动主程序。默认启动等待30秒,可用--startup-timeout调整,最大120秒。--startup-elevated:仅适用于 auto;通过 Windowsrunas显示 UAC,由用户确认,无需先把 agent 改为管理员。取消返回uac_cancelled,不自动重试。- 普通 agent 的 UAC 启动需要新版
--mcp-uac-client支持,授权仅绑定本次 sidecar 的真实 PID 与创建时间。GUI 和 sidecar 仍须同用户、同会话;其它普通进程及 PID 复用者被拒绝,不创建提权代理、不持久化授权。 - sidecar 退出或重新加载后授权失效;已有未授权管理员 GUI 仍会拒绝普通客户端。脚本不会为重新授权关闭、重启或另开已有实例,应报告给用户处理。
- 普通 auto 使用
--mcp-no-auto-elevation单次覆盖主程序保存的自动申请管理员选项,不改 JSON;需要包含此开关的当前 MCP 构建。管理员客户端不能悄悄将“普通启动”变成管理员启动,会返回normal_client_required。 - 只匹配指定 exe 的完整路径,并复核用户、会话和完整性级别;已有实例未启用 MCP 时返回
mcp_not_enabled,不关闭或重启它;多个可用实例时要求改用--pid明确选择。 - 主程序退出后再次调用会重新发现 PID;业务请求只发送一次,失败或超时不自动重试。auto 模式的工具声明会反映可能启动 GUI 的副作用。
主程序可从 官方 Releases 获取。稳定版可能早于 MCP,应同时检查用户允许使用的 pre-release,选择说明明确兼容的主程序包,避开仅 PDB 的附件。没有兼容构建时仍可完成注册和独立工具发现,明确 GUI 连接待验证;下载成功不等于已经兼容。
独立发布仓库根目录就是这些文件所在目录;主仓库内仍位于 tools/ksword_mcp/。源码安装使用 python -m pip install .;旧 server.py 入口继续兼容,依赖旁边的 ksword_mcp/ 包目录。Release 构建会将两者一起复制到 Release/tools/ksword_mcp/。
客户端配置示例
接受 mcpServers 配置的客户端可添加以下条目。将 Python 路径、脚本路径与 KSword 路径替换为本机实际值,并填入用户选择的启动策略;这只是配置示例,本工具不会改用户全局配置:
{
"mcpServers": {
"ksword": {
"command": "python",
"args": [
"C:/path/to/KSword/tools/ksword_mcp/server.py",
"--ksword-exe",
"C:/path/to/Release/Ksword5.1.exe",
"--startup-policy",
"fail"
]
}
}
}
Codex 的对应 TOML 配置示例(请放进需要启用此桥的配置文件):
[mcp_servers.ksword]
command = "python"
args = ["C:/path/to/MCP/server.py", "--ksword-exe", "C:/path/to/Release/Ksword5.1.exe", "--startup-policy", "fail"]
如果 MCP 客户端找不到 python,将 command 换成独立环境 Python 的实际完整路径。核对真实客户端及配置作用域,保留基线到验收完成,确认其它配置不变;环境变量重定向和 PATH 中另一版本的 CLI 不能替代真实落点。普通连接匹配完整性级别,UAC 启动仅对本次指定客户端作例外。分别报告“已注册”“独立 stdio 工具发现”“当前 agent 已加载工具”“GUI 只读连接”,不能互相替代。
工具与操作顺序
| 工具 | 用途 |
|---|---|
ksword_hello |
读取桥版本、PID 和能力说明 |
ksword_pages |
列出页面和懒加载状态 |
ksword_open_page(page_id) |
通过原有导航打开页面并初始化内容 |
ksword_snapshot(page_id?, root_id?, max_nodes?, depth?) |
获取有界 Qt 控件树、支持动作与可用状态 |
ksword_action(object_id, action?, confirmed?) |
press、toggle 或 show_menu |
ksword_set_field(object_id, value, submit?, confirmed?) |
模拟支持控件的用户编辑;复选框/单选及可勾选按钮使用布尔值指定状态 |
ksword_read_table(object_id, row_start?, row_count?, column_start?, column_count?, parent_rows?) |
获取模型切片、表头与 revision |
ksword_select_row(object_id, row, revision, parent_rows?, confirmed?) |
仅在模型 revision 相符时选中对应行 |
ksword_read_text(object_id, offset?, length?) |
按 Qt UTF-16 单位读取有界文本片段 |
ksword_read_custom(object_id, options?) |
读取主程序预注册的特殊控件只读适配器 |
ksword_operation_status(operation_id) |
查询控件调用调度状态 |
ksword_cli_status() |
读取 CLI 的真实路径、文件存在性与超时配置;不执行程序 |
ksword_cli_help(command?) |
读取原生 help;例如 ["system", "ioctl", "call"] |
ksword_cli_execute(arguments, confirmed?, json_output?) |
调用一次 CLI argv,返回真实退出码、stdout/stderr 和可解析的 JSON |
ksword_ioctl(code, input_hex?, output_bytes?, confirmed?) |
通过 CLI 和现有 ArkDriverClient 向 KSword 控制设备发送一次原始 IOCTL |
CLI 操作先用 ksword_cli_status 检查配置,再用 ksword_cli_help 查阅原生命令。任意 CLI 命令和原始 IOCTL 都要求 confirmed=true;原生命令需要的 --confirm 仍由调用方按帮助提供。ksword_cli_execute 默认加 --json,旧文本命令可设置 json_output=false。进程退出码和业务 JSON 原样返回,不把 CLI 的非零退出码当作成功。
ksword_ioctl 的 code 是 uint32,input_hex 是原始字节,输入/输出各上限1 MiB,输出容量默认4096字节。输入通过本次独占临时文件传给 CLI,结束后清理;只输出 bytesReturned 范围内的十六进制数据。编码和缓冲区 ABI 须来自配套 shared/driver/,需要原生指针或额外内存管理的协议使用相应原生 CLI 命令。Win32 传输成功不代替响应中的业务状态;不会自动加载驱动、提权或重发。
--cli-timeout 默认为30秒,最大120秒;stdout/stderr 各限8 MiB。超时仅结束本次创建的 CLI 子进程,操作结果可能未知,应读取状态后再决定下一步。
先调用 ksword_pages、ksword_open_page 和 ksword_snapshot 获取当前对象 ID,之后读取或操作对应控件。对象 ID 是本次进程中的不透明身份,控件销毁后失效;再次创建的控件应重新取 snapshot。树模型用 parent_rows 指定父节点路径,选行时同时传入最近一次 read_table 返回的 revision。
action、set_field 和 select_row 必须显式传 confirmed=true,否则返回 MCP 工具错误。参数先按工具 JSON schema 校验,字符串 "true" 或 "{}" 不会被转换成布尔确认或对象选项;未知顶层参数会被拒绝。原有业务确认弹窗仍然保留,需按 GUI 正常流程处理。这个确认参数表示调用方已授权当前控件动作,不会绕过 KSword 的业务校验。
回执 status=accepted 以及 operation 状态 queued、dispatching、dispatched、failed 只描述控件调用。dispatched 表示完成了控件方法调用,后台任务可能仍在执行,也可能正在等待业务弹窗。应另行读取对应表格、文本或页面状态判断业务结果。
普通复选框使用 ksword_set_field(object_id, value=true, confirmed=true) 勾选,value=false 取消;重复设置相同值不会反向切换。snapshot 对可勾选按钮提供 field_type="boolean"、checked、value 与 set_field 能力。ksword_action(..., action="toggle") 则是反转当前状态;不应把“指定勾选”与“反转”混用。
布尔字段只接受 JSON 的 true/false,不接受字符串 "true" 或数字1,且不支持 submit=true。修改使用控件原生 click,保留 clicked/toggled、单选互斥和业务校验;业务拒绝指定状态时回执为 value_rejected。表格模型单元格的勾选不等同于独立 QCheckBox,不能把表格 object_id 当作普通布尔字段使用。
特殊控件通过主程序预注册的只读适配器扩展。ksword_read_custom 只接收对象 ID 和 JSON 对象选项,GUI 按对象实际 Qt 类匹配适配器;客户端不能指定类名、调用任意方法或执行反射。新增只读控件支持只需在主程序注册适配器,无需修改中央协议或 sidecar。
目前 HexCanvas 适配器接受 options={"address":"0x1000","length":16},其中地址可省略,默认使用光标地址,长度为 1 至 256 字节。回执包含画布当前已加载字节、地址和选区状态;它不会主动从进程读取内存或写入内容。读取其他特殊控件时,应先查看 snapshot 中支持的动作,再按对应适配器选项调用。
自绘画布、专用编辑器和特殊业务操作可能需要额外适配。当前通用桥及已注册适配器覆盖其支持的 Qt 控件语义,不能把工具存在或点击已调度解释为全部产品功能已经验收。
本地边界与超时
- 唯一本地端点为
\\.\pipe\ksword-mcp-{pid};GUI 按 MCP 设置页的本次启停、已保存自动启动偏好或显式--mcp参数监听,退出时关闭。不会创建网络端口或永久服务。 - 停止立即断开当前连接,并使旧对象 ID、模型 revision 与操作回执失效;再次启用会创建新的桥实例。客户端需重新获取 snapshot,不能重用停止前的 ID。通过 MCP 触发停止时,当前连接也可能在停止回执送达前断开,不应自动重试动作。
- sidecar 用
GetNamedPipeServerProcessId核验服务器进程与--pid一致,GUI 校验连接方身份及会话/权限边界。 - 每个工具调用独立连接,一次发送、一帧回执。动作从不自动重试;超时可能发生在 GUI 已接受动作之后,调用方应先检查状态再决定下一步。
- 请求上限 64 KiB,回执上限 2 MiB,包括末尾换行。UTF-8、JSON、schemaVersion、状态与 UUID 均严格验证。单次表格最多读取 2048 个单元格;GUI 另外限制每格 1024 个 UTF-16 单位、整片文本 131072 个单位,截断状态由原回执标示。
- 默认连接 2 秒、写入 2 秒、完整读取 10 秒。读写使用 OVERLAPPED + 有限事件等待;超时调用
CancelIoEx并回收句柄。特殊延迟取消期间保留缓冲区直到内核完成,避免释放仍在使用的内存。 - 最多四个仍在执行的管道调用;额外 MCP 请求只排队一秒,随后返回
bridge_busy。调用方取消不会提前释放仍在执行的原生 I/O 并发槽。 - 可用
--connect-timeout、--write-timeout、--read-timeout调整每阶段预算,每项必须大于 0 且不超过 60 秒。多次读写分片共用该阶段截止时刻。
验证
从独立仓库根目录运行;主仓库先进入 tools/ksword_mcp:
python -m unittest discover -s . -p "test_*.py" -v
npm test
回归验证帧预算、严格 JSON、ID 配对、无动作重试、参数与确认边界;Windows 回归创建测试进程自己的临时命名管道,检查分片读写、三个阶段的有限超时、服务端身份校验和取消后的句柄回收。官方 ClientSession 还会启动真实 sidecar 子进程,验证 stdio 握手、list_tools 和 isError 回传。
这组测试不会启动产品 GUI 或加载驱动。真实 Qt 对象桥夹具的跨进程测试由仓库独立测试入口负责;产品主程序、驱动和全部业务页面的验收需要分别进行。
包发布
独立仓库使用 .github/workflows/release.yml 从 v<version> 标签构建并通过 GitHub OIDC 发布 npm/PyPI;版本须同时匹配 package.json、pyproject.toml 和 ksword_mcp/__init__.py。配置字段和操作见 PUBLISHING.md。许可证保持 KSword Community Source License 1.6。
Metadata
Release files for ksword-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ksword_mcp-0.1.0.tar.gz | 93.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ksword_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 155.0 kB
Release files / ksword_mcp-0.1.0.tar.gz
| Download URL | ksword_mcp-0.1.0.tar.gz |
|---|---|
| Size | 93.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f9bf6e197044d71bef1542e6e9fa739d22db92f77a458793b46f24e63b0dafa3
|
|
BLAKE2b-256 checksum How to use checksums |
a0f0be4a4561840a907cb905b0ad3bbf4f25940f2b1c1568cdb7a6b3fc5ecae9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logRelease files / ksword_mcp-0.1.0-py3-none-any.whl
| Download URL | ksword_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 62.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b91d7d9bd2c8d4b6f95062dafa639f2d65d4cefa5d03c4aab8ecec28010e0f61
|
|
BLAKE2b-256 checksum How to use checksums |
7bb9dab1e969c6f47e4c964bca6aa4110112d1ca2e40e12920f5694c5ec78e9a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency log