mcpField
S
Scripthold

Scripthold

本地服务
github.com/zoster81开发工具12 天前更新

关于 Scripthold

Scripthold 是面向 web、桌面和 CLI Agent 的本地工作区运行环境,以明确授权目录控制文件访问。它结合编码感知文件操作、源码分析、审批式变更、备份和可选的持久执行任务。

主要功能

  1. 01检测并处理 168 种文本编码
  2. 02源码符号导航与结构化查询
  3. 03审批绑定的文件变更
  4. 04备份历史、比较与恢复
  5. 05持久异步任务及取消
  6. 06stdio 与认证 HTTP 传输

适用场景

  1. 01安全开放指定项目目录给 Agent
  2. 02识别或转换旧式文本编码
  3. 03审阅并应用文件或 Markdown 修改
  4. 04检查代码结构和依赖关系

MCP 相关

Scripthold 是 MCP 服务,通过 stdio 或经 bearer token 认证的 Streamable HTTP 向 MCP 客户端提供工作区工具。文件访问受明确授权的根目录约束。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
mcpbscripthold_windows_amd64.mcpb
mcpbscripthold_windows_arm64.mcpb
mcpbscripthold_linux_amd64.mcpb
mcpbscripthold_linux_arm64.mcpb
mcpbscripthold_darwin_amd64.mcpb
mcpbscripthold_darwin_arm64.mcpb

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Scripthold — 面向本地工作区的安全 MCP 服务

Test Suite CodeQL OpenSSF Scorecard GitHub Release Release downloads Go License: GPL-3.0 MCP Registry AgentHub 已收录:Scripthold Glama

从网络获取代码。在本地工作。安全恢复。

Scripthold 是一个 Model Context Protocol (MCP) 服务,可让网页、桌面和命令行 Agent 受控访问经过明确授权的本地工作区。它能安全处理旧版文本编码、确定性文件更改、源代码导航、备份,以及通过 stdio 或经过身份验证的 Streamable HTTP 执行可选的持久化本地任务。

AI 客户端看到的是 Настройки,而不是 ???? 或 Íàñòðîéêè。

从这里开始:快速开始 · 查找工具 · 全部文档 · 安全策略。

Scripthold 提供的功能

Scripthold 4.x 提供 36 个工具和 3 个引导式提示词;最新发布版本请参阅 GitHub Releases。从 3.x 升级的客户端应遵循 4.0 迁移指南,了解统一确认工具。4.0.1 中,source_symbols outline 响应默认使用紧凑树形格式;传入 presentation: "detailed" 可保留先前的 files 和 symbols 字段。

  • 168 种已注册的文本编码,支持基于内容的检测、UTF-32 LE/BE,并采用保守的歧义处理方式。
  • 100 个活跃的源代码智能提供程序,用于有界声明导航、结构化搜索、所选项目关系和经过验证的上下文组装。
  • 安全的工作区边界,包含规范根目录范围校验、Windows 重解析点/联接处理、确定性遍历和路径缺失验证。
  • 与审批绑定的变更操作,使用预览/应用能力、精确指纹、冲突检查、暂存写入和如实的部分状态报告。
  • 可选的持久化备份,支持历史记录、比较、审计、恢复、显式垃圾回收、固定和按精确 ID 删除。
  • 持久化异步任务,支持幂等性、持久化状态、有界日志、恢复、锁定和取消。
  • 可靠的长时间运行只读调用,通过可选的延迟操作存储和有界的保留结果检索实现。
  • 经过身份验证的 Streamable HTTP,采用回环地址默认值、Bearer 身份验证、Host/Origin 验证、资源限制,以及非回环地址暴露所需的显式 TLS/代理要求。

Scripthold 源自原始的 mcp-file-tools 项目,该项目由 Dimitar Grigorov 创建,并沿袭 GPL-3.0 许可证。请参阅项目方向。

快速开始

选择一个已发布的二进制文件,或从源代码构建;然后配置 MCP 客户端,使其仅能访问你打算共享的目录。HTTP 和容器部署还需要完成下文所述的额外设置。

使用已发布的版本

从最新版本下载适用于你平台的构建文件,并根据 checksums.txt 验证。常规 GoReleaser 构建文件还附带经过签名的 Sigstore 构建来源证明包。

从源代码构建
git clone https://github.com/zoster81/scripthold.git
cd scripthold
go test ./...
go build -o scripthold ./cmd/scripthold

模块路径为 github.com/zoster81/scripthold。

本地 stdio 客户端

将每个已授权目录作为启动参数传入:

{
  "mcpServers": {
    "scripthold": {
      "type": "stdio",
      "command": "C:\\Tools\\scripthold_windows_amd64.exe",
      "args": ["D:\\Projects"]
    }
  }
}

启动根目录具有权威性。只有在进程启动时未传入目录参数的情况下,支持 roots 的 stdio 客户端才能提供动态根目录。

已验证的自我更新

受支持的独立安装可以选择启用自我更新。运行 scripthold update --adopt 前,请停止使用同一二进制文件的其他 Scripthold 进程。接管操作会准备本地状态,不会下载或替换可执行文件。

完成接管后,运行 scripthold update 来验证并分发可用版本。使用 scripthold update status 确认是否完成;仅当状态命令提示可恢复时,才运行 scripthold update recover。这些操作具有不同的安全性和验证要求。

有关受支持的安装方式、精确命令、故障处理和恢复规则,请参阅已验证的自我更新指南。

Streamable HTTP

HTTP 必须且只能配置一个 Bearer 令牌来源。最简的回环地址 PowerShell 启动命令如下:

$tokenPath = Join-Path $env:TEMP "scripthold.token"
$bytes = New-Object byte[] 32
$rng = [System.Security.Cryptography.RandomNumberGenerator]::Create()
try { $rng.GetBytes($bytes) } finally { $rng.Dispose() }
[System.IO.File]::WriteAllText($tokenPath, [Convert]::ToBase64String($bytes), [System.Text.UTF8Encoding]::new($false))

$env:MCP_HTTP_TOKEN_FILE = $tokenPath
$env:MCP_HTTP_ADDR = "127.0.0.1:8765"
.\scripthold_windows_amd64.exe --transport=streamable-http D:\Projects

MCP 端点为 http://127.0.0.1:8765/mcp;/healthz 和 /readyz 用于检查存活状态和就绪状态。每个 MCP 请求都要在 Authorization: Bearer <token> 中发送令牌。

在阅读 HTTP 安全之前,不要将 HTTP 暴露到回环地址之外。非回环地址使用需要显式选择启用,并要求配置 TLS 或可信代理边界。

OpenAI Secure MCP Tunnel

已清理的 PowerShell 示例位于 examples/ 下:

替换占位符前,请将示例复制到代码检出目录之外。切勿提交 Runtime API 密钥、Tunnel ID、Bearer 令牌或私有状态路径。

容器
docker build --build-arg VERSION=dev -t scripthold:dev .

docker run --rm -i \
  --read-only \
  --cap-drop=ALL \
  --security-opt=no-new-privileges \
  --tmpfs /tmp:rw,noexec,nosuid,size=64m \
  --mount type=bind,source=/absolute/project,target=/data \
  scripthold:dev --transport=stdio /data

镜像以非特权 UID/GID 10001 运行。

工具组

TOOLS.md 是包含架构、参数、示例、限制和错误行为的详细公开参考。下表介绍 4.x 工具目录(36 个工具)。从 3.3.6 升级的客户端必须将原有的 8 个 apply 命令迁移到 confirm_verified_operation。

类别主要工具
文本/文件read_text_file、read_multiple_files、write_whole_file、edit_file、grep_text_files
确认confirm_verified_operation — 对任何已准备操作进行一次性批准
多文件变更patch_package、filesystem_package
目录/状态list_directory、tree、search_files、get_file_info、fingerprint_paths、verify_state
编码detect_encoding、convert_encoding、detect_line_endings、change_line_endings、manage_bom、list_encodings
备份backup_store、backup_delete
源代码智能分析source_symbols、source_query
Markdown 智能分析markdown_read、markdown_workspace、markdown_create、markdown_edit
持久化工作task_run、task_list、task_get、task_logs、task_cancel、deferred_operation
服务list_allowed_directories、check_for_updates

源代码智能分析

源代码智能分析可帮助 Agent 浏览源代码,而无需运行代码,也无需外部编译器、解析器或语言服务器。使用 source_symbols 配合 digest presentation: "compact" 映射项目文件;默认浏览树状文件大纲(也可请求 presentation: "detailed",获取旧版大纲 JSON 结构),并检查选定的符号;使用 source_query 进行结构化搜索、查询受支持的项目关系、依赖关系图和已验证的上下文。查找未由结构化符号表示的任意文本或代码行为时,请使用 grep_text_files。

对于不受支持或含义模糊的关系,系统会拒绝处理,而不会猜测。Markdown 文件有专用的文档工具。请查看生成的语言能力矩阵,了解可用的源代码提供程序和分析覆盖范围。

Markdown 文档

Markdown 文件使用专用工具,而非 Source Intelligence 提供程序。使用 markdown_read 读取文档,或使用只读工具 markdown_workspace 检查文件之间的链接和关系。

要更改文档,请使用 markdown_edit 准备预览(新建文件则使用 markdown_create),检查拟议内容,然后将其 previewId 传递给 confirm_verified_operation。不安全、存在冲突或已过时的更改会被拒绝,而不会被静默重写。

示例和具体操作形式请参阅 Markdown 工具参考。有关 Markdown 语义、支持的编码以及 Marksplice 集成边界,请参阅 Markdown Intelligence。

安全模型

  • 文件访问仅限于经过规范路径验证后明确授权的根目录。
  • 符号链接、junction、重解析点、别名和缺失路径导致的越界访问均会被拒绝。
  • 编码检测依据字节和解码后内容的证据,绝不依据文件名或扩展名。
  • 修改会在提交前暂存并重新验证;最初不存在的目标路径采用 no-replace 语义。
  • 预览/应用工作流会将已批准操作绑定到一次性能力,因此无法在应用时更改修改参数。
  • 多文件修改不保证事务性回滚;如适用,失败时会报告已提交/未更改/状态未知。
  • 可选的备份存储是位于公共根目录之外的独立受保护权限域。
  • 默认禁用 task_run 执行。Shell 和脚本执行需要明确授权;HTTP 执行还需要额外启用 HTTP 执行。
  • 默认情况下,HTTP 经过身份验证且仅限环回地址。

当前的架构边界概述见 架构。

关键配置

大多数安装只需设置少量环境变量:

变量用途默认值
MCP_TRANSPORTstdio 或 streamable-httpstdio
MCP_DEFAULT_ENCODING新建文本文件的编码utf-8
MCP_HTTP_ADDRHTTP 监听地址127.0.0.1:8765
MCP_HTTP_TOKEN_FILE / MCP_HTTP_TOKEN互斥的 bearer token 来源未设置
MCP_HTTP_ALLOW_NON_LOOPBACK满足其他安全要求时,允许绑定非环回地址禁用
MCP_BACKUP_STORE_DIR启用持久化备份存储未设置
MCP_BACKUP_DEFAULT_POLICY适用的、与审批绑定的修改操作的默认持久化备份策略disabled
MCP_TASK_STORE_DIR启用持久化任务存储未设置
MCP_DEFERRED_STORE_DIR为符合条件的长时间运行只读调用启用持久化所有权未设置
MCP_ENABLE_RUN_SCRIPT允许 task_run kind=script禁用
MCP_ENABLE_SHELL允许 task_run kind=shell禁用
MCP_ENABLE_EXECUTION允许这两种任务类型禁用
MCP_HTTP_ENABLE_EXECUTIONHTTP 执行的额外门控禁用

详细限制和子系统特定选项请参阅其对应文档:TOOLS.md、持久化任务和 HTTP 安全。

文档

使用文档指南,按任务查找说明,无论你是在配置客户端、选择工具、保护部署安全,还是为项目做贡献。

开发

所需的 Go 版本在 go.mod 中声明。

go mod verify
go test ./...
golangci-lint run ./...
go build -o scripthold ./cmd/scripthold

提交更改前,请参阅 CONTRIBUTING.md。

许可证

GPL-3.0 — 参见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。