Ghostlink

io.github.bgorzelic由 GitHub 账号 bgorzelic 发布v0.1.0更新于 Oct 24, 2026

Sandboxed repo access for coding agents: search, read, patch, run, git -- confined to a repo root.

概览

AI 生成的概览

本地运行的沙箱式 MCP 服务器,让编码助手在单一仓库根目录内搜索、读取、打补丁、运行白名单命令并查看 git 状态。

可以做什么
  • 用正则和 glob 过滤搜索代码,并在大小上限与二进制检测下读取文件
  • 以 dry-run、沙箱校验和原子回滚方式应用统一 diff 补丁
  • 运行固定命令集(test、lint、typecheck、build、smoke),参数受白名单限制并带超时
  • 查看 git 状态(分支、领先/落后)以及暂存或未暂存的 diff
  • 每次调用返回结构固定的 JSON 信封并附来源信息,同时写入一条 JSONL 审计记录
适用场景
当助手需要在本地 git 仓库上工作、但不应获得原始 shell 权限时使用:适用于编码代理的搜索、读取、打补丁、验证循环,且操作被限制在一个仓库根目录内、输出有上限。
运行要求
通过 npm 包(npx)或构建后的源码以 STDIO 在本地运行。需要 Node.js 18+、已安装 ripgrep,以及一个 git 仓库。必须设置环境变量 GHOSTLINK_REPO_ROOT,值为仓库的绝对路径。GHOSTLINK_LOG 可选,用于选择审计日志方式(stdout、file 或 off)。
安装前请注意
该服务器可通过应用补丁修改目标仓库中的文件,并可运行构建/测试命令,因此 GHOSTLINK_REPO_ROOT 只应指向你愿意被改动的仓库。审计日志默认开启,会记录工具名、结果和仓库根路径;可将 GHOSTLINK_LOG 设为 off 关闭。未声明任何身份验证,能启动该进程的人即继承其对该仓库的访问权限。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Ghostlink,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

GhostLink

A security-hardened MCP server that gives AI coding agents safe, deterministic access to local repositories.

[CI] [npm] [TypeScript] [Node] [Tests] [License: ISC]

Add it to any MCP client that supports STDIO. For Claude Code, create .mcp.json in the target repo root:

json
{  "mcpServers": {    "ghostlink": {      "command": "npx",      "args": ["-y", "ghostlink"],      "env": {        "GHOSTLINK_REPO_ROOT": "/path/to/target/repo"      }    }  }}

Then run claude in that directory — six repo tools appear, all confined to GHOSTLINK_REPO_ROOT. Every tool call returns the same deterministic ToolEnvelope:

json
{  "ok": true,  "data": { ... },  "provenance": { "tool": "repo.search", "timestamp": "2026-02-24T...", "duration_ms": 42 }}

On error, "error": { "code": "...", "message": "..." } replaces "data". Full tool schemas: docs/TOOLS.md.

Tools

ToolDescription
repo.searchRipgrep-powered regex search with glob filtering, deterministic ordering, and output caps (max 200 results)
repo.read_fileFile read with size caps (max 10MB), binary detection, and truncation flags
repo.apply_patchUnified diff patching with dry-run mode, full sandbox validation, and atomic rollback on failure
repo.runCurated command execution (test, lint, typecheck, build, smoke) -- no arbitrary shell, allowlisted args only
git.statusNormalized git status with branch info, ahead/behind tracking, and sorted file entries
git.diffStaged or unstaged diff with path filtering, sandbox validation, and output caps (max 2MB)

What is GhostLink?

GhostLink is a local-first Model Context Protocol server that exposes your codebase to AI coding agents through a small set of policy-gated tools. It solves a specific problem: AI agents need to search, read, patch, and verify code, but giving them raw shell access is a liability. GhostLink provides a sandboxed capability plane where every tool call is confined to a single repository root, every output follows a deterministic JSON shape, and every invocation is audit-logged.

Why GhostLink?

CapabilityWhat it means
Secure local dev planeRepo-root sandbox, no shell execution, JSONL audit trail on every tool call
Deterministic outputSame input produces the same JSON envelope shape -- enables golden tests and predictable agent consumption
Policy enforcementCommand allowlists, output caps, truncation flags, timeout enforcement -- the AI cannot do unbounded damage
Agent loop foundationBuilt for the search, read, patch, verify cycle that autonomous coding agents run in a loop
Multi-server compositionOne GhostLink instance per repo, composable with other MCP servers in the same client session
Production-ready Phase 2 baseTransport abstraction, schema versioning, and auth hook seams are preserved in the architecture today

Architecture

GhostLink is a three-layer stack designed for extensibility without core changes:

mermaid
flowchart TD    T["Transport -- src/index.ts<br/>STDIO now, HTTP/SSE in Phase 2"]    S["Server factory -- src/server.ts<br/>Transport-agnostic tool registration via MCP SDK + Zod schemas"]    TL["Tools -- src/core/tools/*<br/>Six tools, each returning ToolEnvelope&lt;T&gt;"]    P["Policy -- src/core/policy/*<br/>Sandbox enforcement, audit logging, output caps"]    T --> S --> TL --> P

The createServer() factory knows nothing about transport. Adding HTTP/SSE in Phase 2 means writing a new transport binding and auth middleware -- the server factory and all tool implementations remain unchanged. Phase 3 (agent runtime) adds memory resources and orchestration as consumers of GhostLink, not modifications to it.

Quick Start

Prerequisites

  • Node.js 18+
  • ripgrep (brew install ripgrep)
  • A git repository to expose

Install

From npm:

bash
npm install ghostlink

Or from source:

bash
git clone https://github.com/bgorzelic/ghostlink.gitcd ghostlinknpm installnpm run build

Smoke Test (Raw STDIO)

GhostLink speaks JSON-RPC 2.0 over STDIO. Test it directly:

bash
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | \  GHOSTLINK_REPO_ROOT=/path/to/target/repo node dist/index.js

This returns all 6 tools and their schemas.

Client Configuration

GhostLink works with any MCP client that supports STDIO transport. The npx snippet at the top of this page works everywhere; a source checkout uses node with the built entry point instead:

json
{  "ghostlink": {    "command": "node",    "args": ["/absolute/path/to/ghostlink/dist/index.js"],    "env": {      "GHOSTLINK_REPO_ROOT": "/path/to/target/repo"    }  }}
ClientWhere the config goes
Claude Code.mcp.json in the target repo root (mcpServers key), then run claude there
Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json (mcpServers key), then restart
Cursor, Windsurf, Cline, othersYour client's MCP server configuration -- consult its documentation for the file location

The transport is always STDIO. Ready-to-use .mcp.json and CLAUDE.md templates for target projects live in templates/.

Security Model

GhostLink enforces defense-in-depth at every layer:

  • Repo-root sandbox -- All file operations confined to GHOSTLINK_REPO_ROOT. Path traversal, symlink escape, null bytes, and absolute paths outside the root are all rejected before any filesystem access.
  • No shell execution -- repo.run uses spawn with shell: false. Commands are limited to a fixed allowlist (test, lint, typecheck, build, smoke) with per-command argument allowlists. Environment is stripped to six safe variables.
  • Output caps -- Every tool that returns bulk data enforces hard maximums (200 search results, 10MB file reads, 200KB stdout/stderr, 2MB diffs). Truncation is flagged, never silent.
  • Atomic patch rollback -- repo.apply_patch validates all paths and computes all patches before writing anything. If any write fails, completed writes are rolled back to their original state.
  • Timeout enforcement -- repo.run kills processes at configurable timeouts (default 120s, hard cap 300s) with SIGTERM then SIGKILL.

Full threat model and mitigations: docs/SECURITY.md.

Audit Logging

Every tool call produces a JSONL audit entry: {ts, tool, ok, duration_ms, error_code?, repo_root}.

GHOSTLINK_LOGBehavior
stdout (default)JSONL audit lines written to stderr
fileJSONL written to logs/ghostlink.jsonl (auto-rotates at 10MB)
offNo logging

Set via environment variable:

bash
GHOSTLINK_LOG=file GHOSTLINK_REPO_ROOT=/path/to/repo node dist/index.js

Prompt Templates

docs/PROMPTS.md contains ready-to-use prompts for high-autonomy agent operation, including orchestrator prompts, sub-agent role definitions (Protocol Engineer, Toolsmith, Security Reviewer, Test Engineer, Docs Engineer), and multi-instance coordination patterns.

Development

bash
npm install          # Install dependenciesnpm test             # Run test suite (108 tests via Vitest)npm run lint         # ESLintnpm run typecheck    # TypeScript strict mode checknpm run build        # Compile to dist/npm run dev          # Dev mode with auto-reload (tsx watch)

Full verification after edits:

bash
npm test && npm run lint && npm run typecheck && npm run build

Documentation

DocumentDescription
docs/TOOLS.mdCanonical tool schemas (versioned public API)
docs/SECURITY.mdThreat model and mitigations
docs/QUICKSTART.mdSetup, smoke tests, and client configuration walkthrough
docs/INSPECTOR.mdMCP Inspector manual testing guide
docs/PROMPTS.mdAgent prompts for orchestration and sub-agent roles
docs/ROADMAP_DETAILED.mdFull product roadmap with Phase 2 and Phase 3 deliverables
docs/WHY_GHOSTLINK.mdStrategic value proposition and architecture rationale
docs/ENGINEERING_REPORT_v0.1.0.mdv0.1.0 ship report with milestone history and decision log
templates/Ready-to-use CLAUDE.md and .mcp.json templates for target projects

Roadmap

Phase 1 -- Local STDIO [Shipped, v0.1.0]

Deterministic tool surface, repo-root sandbox, curated command execution, 108 tests, JSONL audit logging, npm package published.

Phase 2 -- Remote Transport [Planned]

HTTP/SSE transport, OAuth 2.1 authentication, multi-user tenant separation, per-tenant rate limiting, schema versioning, structured audit logging with correlation IDs.

Phase 3 -- Agent Runtime [Future]

Persistent memory resources exposed via MCP, optional policy-gated memory write tools, orchestration layer (external to GhostLink), evaluation loops, sub-agent coordination framework.

License

ISC

来源:README.md,提交 9f40c5f

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.1.0最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分