
Ghostlink
io.github.bgorzelicPublished by GitHub account bgorzelicv0.1.0Updated Oct 24, 2026
Sandboxed repo access for coding agents: search, read, patch, run, git -- confined to a repo root.
Overview
Sandboxed local MCP server that lets a coding agent search, read, patch, run allowlisted commands and inspect git inside one repository root.
- What you can do
- Search code with regex and glob filters, and read files with size caps and binary detection
- Apply unified diffs with dry-run, sandbox validation and atomic rollback
- Run a fixed set of commands (test, lint, typecheck, build, smoke) with allowlisted arguments and timeouts
- Inspect git status with branch and ahead/behind info, and view staged or unstaged diffs
- Return every result in a deterministic JSON envelope with provenance, and write a JSONL audit entry per call
- When to use it
- Use it when an agent needs to work on a local git repository but should not get raw shell access: the search, read, patch, verify loop of a coding agent, with confinement to one repo root and bounded output.
- Requirements
- Runs locally over STDIO via the npm package (npx) or a built source checkout. Needs Node.js 18+, ripgrep installed, and a git repository. The GHOSTLINK_REPO_ROOT environment variable is required and must be an absolute path to the repository. GHOSTLINK_LOG optionally selects audit logging (stdout, file, or off).
Installation
In SourceWeft
- Open Ghostlink in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
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:
Then run claude in that directory — six repo tools appear, all confined to GHOSTLINK_REPO_ROOT. Every tool call returns the same deterministic ToolEnvelope:
On error, "error": { "code": "...", "message": "..." } replaces "data". Full tool schemas: docs/TOOLS.md.
Tools
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?
Architecture
GhostLink is a three-layer stack designed for extensibility without core changes:
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:
Or from source:
Smoke Test (Raw STDIO)
GhostLink speaks JSON-RPC 2.0 over STDIO. Test it directly:
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:
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.runusesspawnwithshell: 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_patchvalidates 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.runkills 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}.
Set via environment variable:
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
Full verification after edits:
Documentation
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
Source: README.md at commit 9f40c5f
Tools
0Version history
1- v0.1.0LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts