Atlas / MCP servers / kolapsis / Herald

HeraldBLOCK

mcp/kolapsis/herald-1

The self-hosted MCP bridge between Claude Chat and Claude Code.

Verdict
BLOCK
Grade
F
Trust score
47 /100
Exposed tools
—
Transport
streamable-http
License
AGPL-3.0
Stars
46
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Herald

Code from your phone. Seriously.

The self-hosted MCP bridge between Claude Chat and Claude Code.

Documentation · Quick Start · How It Works · Features · Security · Roadmap

🇫🇷 Version française

You're on the couch. On your phone. You open Claude Chat and type:

"Refactor the auth middleware in my-api to use JWT instead of session cookies. Run the tests."

Four minutes later, it's done. Branch created, code refactored, tests passing, changes committed. Your workstation did all the work. You never opened your laptop.

That's Herald.

The Problem

Claude Chat and Claude Code are two brilliant tools that live in completely separate worlds.

You've been copy-pasting between them. Or worse — you've been waiting until you're back at your desk. That's over.

The Solution

Herald is a self-hosted MCP server that bridges Claude Chat to Claude

Read from source at commit d67b9596738dOBSERVED · 2026-10-08
02

Trust audit

BLOCKgrade F · trust 47/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryFAIL
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)WARN
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (1 observation(s))
Network
declared (12 observation(s))
Shell
none-observed
Dependencies
pinned
Secrets in source
found

Findings (25)

HIGHHard-coded secrets · inv.env_committed · CWE-798, CWE-321
.env
.env
Why it matters. a real .env in the package
Fix. ship .env.example with placeholders only
HIGHPrivilege escalation / persistence · priv.escalate · CWE-269, CWE-250
install.sh:155
sudo mv "$src" "$dst"
Why it matters. asks for elevated privileges
HIGHPrivilege escalation / persistence · priv.escalate · CWE-269, CWE-250
install.sh:156
sudo chmod +x "$dst"
Why it matters. asks for elevated privileges
MEDIUMFilesystem / path · fs.system_paths · CWE-22, CWE-59
internal/config/loader.go:16
"/etc/herald/herald.yaml",
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
cmd/herald/main.go:116
url := fmt.Sprintf("http://127.0.0.1:%d/health", *port)
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
install.sh:225
public_url="http://127.0.0.1:${port}"
MEDIUMPrompt injection · scope.undeclared_system · CWE-94, CWE-1427
<declared scope>
system use found in code, not declared in the description
Why it matters. the description does not admit a capability the code has
Fix. declare system use in the description, or remove it
MEDIUMAuth / authz · mcp.remote_no_auth · CWE-287, CWE-862
streamable-http
Why it matters. a network transport with no auth environment variable found
Fix. require a token
LOWInventory / provenance · inv.hidden_file · CWE-1104
.env
.env
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.goreleaser.yml
.goreleaser.yml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.system_paths · CWE-22, CWE-59
internal/config/loader_test.go:41
claude_path: "/usr/local/bin/claude"
LOWFilesystem / path · fs.system_paths · CWE-22, CWE-59
internal/config/loader_test.go:68
assert.Equal(t, "/usr/local/bin/claude", cfg.Execution.ClaudePath)
LOWFilesystem / path · fs.system_paths · CWE-22, CWE-59
internal/executor/claude/claude_test.go:71
"claude_path": "/usr/local/bin/claude",
LOWFilesystem / path · fs.system_paths · CWE-22, CWE-59
internal/executor/claude/claude_test.go:78
assert.Equal(t, "/usr/local/bin/claude", claudeExec.ClaudePath)
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
internal/mcp/handlers/get_diff_test.go:282
"path": "../../../etc/passwd",
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
internal/mcp/handlers/read_file_test.go:47
{"deep traversal", "../../../etc/shadow"},
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
internal/mcp/handlers/read_file_test.go:49
{"hidden traversal", "src/../../etc/passwd"},
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/deployment/bare-metal.md:165
curl http://127.0.0.1:8420/health
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/deployment/traefik.md:101
- url: "http://127.0.0.1:8420"
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/getting-started/connecting.md:65
- Verify Herald is running: `curl http://127.0.0.1:8420/health`
LOWContainer / deploy · priv.container · CWE-250, CWE-16
docs/deployment/traefik.md:32
- "/var/run/docker.sock:/var/run/docker.sock:ro"
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/deployment/bare-metal.md:48
Claude Code relies on user-level authentication tokens stored in your home directory. A **user-level systemd service** (`~/.config/systemd/user/`) inherits your environment, so Herald can access Claud
Why it matters. asks the agent to read credentials
LOWSupply chain · prompt.pipe_to_shell · CWE-829, CWE-1357
README.md:162
curl -fsSL https://raw.githubusercontent.com/btouchard/herald/main/install.sh | sh
LOWSupply chain · prompt.pipe_to_shell · CWE-829, CWE-1357
README_FR.md:162
curl -fsSL https://raw.githubusercontent.com/btouchard/herald/main/install.sh | sh
LOWSupply chain · prompt.pipe_to_shell · CWE-829, CWE-1357
docs/getting-started/installation.md:19
curl -fsSL https://raw.githubusercontent.com/btouchard/herald/main/install.sh | sh

Gates applied: no_behavioural_pass.

Audited 2026-10-08 · audit v0.4.1 · source sha d67b9596738dfull audit observations/trust-audit/mcp-server/kolapsis__herald-1.json · Report an issue / request a re-scan
03

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-08d67b9596738dBLOCKF47first audit
04

Questions

What is the Herald MCP server?

The self-hosted MCP bridge between Claude Chat and Claude Code.

Is Herald safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (47/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does Herald need?

No credential environment variables were found in its source, so it appears to need none.

How does Herald run?

It speaks streamable-http, so it runs as a service you connect to over the network.

How current is this page?

The grade is for one exact copy of the source (d67b9596738d), read on 2026-10-08. The repository is watched and re-audited when it changes.

Advertisement