Atlas / MCP servers / th060419 / gatherthread

gatherthreadBLOCK

mcp/th060419/gatherthread

GatherThread 共序:本地 AI 编程 Agent 多人联机协作、实时共享上下文。Self-hostable collaboration for local AI coding agents, Codex Desktop connector & DeepSeek Harness plugin.

Verdict
BLOCK
Grade
F
Trust score
58 /100
Exposed tools
1 1r · 0w · 0d
Transport
—
License
Apache-2.0
Stars
6
01

Overview

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

Work together. Bring your Agents. Keep going anywhere.

GatherThread puts your team's discussion, AI-assisted work, and file review in one shared conversation. Collaborate live, use your own Agent, and continue from a computer, phone, or tablet. Less copying between chats. More progress everyone can follow.

Open GatherThread · Try the example · Illustrated guide · 简体中文

Open source · Self-hostable · Current version identifier 0.1.0-beta.1 · Apache 2.0

Beta 1 is the npm and isolated-test release. Test service: enter your private tester code, then verify your email and sign in with a password. Production is upgraded separately; project invitations are not account registration codes. The Cloud Agent entry is open in Beta 1; usable models depend on the test operator's validated provider and container configuration, with availability shown in the workspace.

Your team. Your devices. Your Agents.

Work together in the same conversation. Agree on a goal, ask your Agent to work, and let teammates follow the result. Quote a particular message or mention someone instead of explaining the same thing twice. Discussion and development stay together.

Keep going beyond your desk. The same account can be signed in on computers, phones, and tablets at once. On your phone, continue the discussion, review progress, or ask your connected computer Agent to keep working. Move to another computer by downloading the file version you saved.

Choose the helper that fits. Connect Codex or DeepSeek Harness, or use the cloud trial Agent for a small task without local setup. Choose from that Agent's supported models and options. Each teammate keeps their own setup while sha

Read from source at commit 2981ec88f1bdOBSERVED · 2026-10-10
02

Exposed tools (1)

1 read · 0 write · 0 destructive.

ToolRiskDescription
gatherthread_redaction_fixturereadReturn a deterministic public value containing secret-shaped fixture fields.
03

Trust audit

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

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (7 observation(s))
Network
declared (15 observation(s))
Shell
declared (2 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/protocol/src/code-sync.ts:35
if ([".git", ".codex", ".dsh", ".ssh", ".npmrc", ".netrc", ".ds_store"].includes(lower)) return false;
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/protocol/src/code-sync.ts:38
return !/\.(?:pem|p12|pfx|key)$/iu.test(lower) && !/^(?:id_rsa|id_ed25519)(?:\.|$)/iu.test(lower);
Why it matters. touches a credential store
HIGHNetwork egress · net.env_exfil · CWE-200, CWE-319
scripts/check-branding.mjs:14
".env" ... WebSocket
Why it matters. reads secrets in the same file that sends data out
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.env.example:20
GATHERTHREAD_PUBLIC_BASE_URL=http://127.0.0.1:18787
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.env.example:67
GATHERTHREAD_WEB_API_ORIGIN=http://127.0.0.1:18787
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
apps/server/src/config.ts:156
configuredPublicBaseUrl || `http://127.0.0.1:${port}`,
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
apps/server/src/hosted-agent.ts:396
options: { baseURL: "http://127.0.0.1:8787/v1", apiKey: "local" },
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/server/test/dsh-pairing.test.ts:66
token: "gta_fixture-long-lived-device-token",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/server/test/dsh-pairing.test.ts:74
token: "gta_fixture-long-lived-device-token",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/dsh-host/test/canonical-prompt.test.ts:81
token: "PRIVATE_PAYLOAD_TOKEN",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/dsh-host/test/config.test.ts:33
() => parseDshHostConfig({ ...enabledConfig, token: "must-not-be-accepted" }),
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/dsh-host/test/config.test.ts:193
const secret = "gta_01234567890123456789012345678901";
LOWInventory / provenance · inv.hidden_file · CWE-1104
.node-version
.node-version
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
packages/bridge/test/code-sync.test.ts:18
const sha = (text: string) => createHash("sha1").update(text).digest("hex");
LOWInformation disclosure · disclose.log_secret · CWE-209, CWE-532
tests/browser/auth-layout.mjs:141
if (locale === "zh-CN") console.log(`${name}: ${width}x${height} pointer/scroll/password checks passed`);
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
scripts/test-environment/test_verify_candidate.py:145
for name in [".git/config", ".ssh/id_rsa", ".aws/config", ".workbench/state", ".local/state",
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
scripts/test-environment/test_verify_candidate.py:146
".env", ".env.local", ".env.production", ".git-credentials", ".netrc", ".npmrc",
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
scripts/test-environment/test_verify_candidate.py:147
"authorized_keys", "known_hosts", "id_rsa", "id_ed25519", "secret.pem", "secret.key",
Why it matters. touches a credential store
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/server/test/code-repository.test.ts:441
for (const path of ["../escape", "a/../../x", "/tmp/x", "a\\x", "A/.GIT/config", ".gatherthread/state", ".env", "a/.codex/auth.json", "x.key", "aux.txt", "a/CON", "a.", "a:stream", "a".repeat(256), "汉
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/server/test/fixtures/hosted-mount-permissions.ts:7
import type { CodeRepository } from "../../src/code-repository.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/server/test/fixtures/hosted-mount-permissions.ts:8
import { CollaborationDatabase } from "../../src/database.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/server/test/fixtures/hosted-mount-permissions.ts:9
import { HostedAgent, type HostedAgentOptions } from "../../src/hosted-agent.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/server/test/fixtures/hosted-mount-permissions.ts:10
import { HostedRepositoryRunner } from "../../src/hosted-repository-runner.js";
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
apps/server/README.md:104
Set `GATHERTHREAD_ALLOWED_ORIGINS` to a comma-separated exact Origin allowlist when the browser is hosted separately, for example `http://127.0.0.1:4173`. Cross-origin requests are denied by default.
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
apps/web/src/cloud-github-view.js:55
const value = new TextDecoder("utf-8", { fatal: true }).decode(Uint8Array.from(atob(base64), (c) => c.charCodeAt(0)));

Gates applied: no_behavioural_pass.

Audited 2026-10-10 · audit v0.4.1 · source sha 2981ec88f1bdfull audit observations/trust-audit/mcp-server/th060419__gatherthread.json · Report an issue / request a re-scan
04

Audit history

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

DateSourceVerdictGradeScoreChange
2026-10-102981ec88f1bdBLOCKF58first audit
05

Questions

What is the gatherthread MCP server?

GatherThread 共序:本地 AI 编程 Agent 多人联机协作、实时共享上下文。Self-hostable collaboration for local AI coding agents, Codex Desktop connector & DeepSeek Harness plugin.

What tools does gatherthread expose?

1 in total: 1 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is gatherthread safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (58/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 gatherthread need?

It reads ACP_AUTH_TOKEN_PEPPER, API_TOKEN, GATHERTHREAD_AUTHORIZATION_TOKEN, GATHERTHREAD_AUTH_TOKEN_PEPPER, GATHERTHREAD_BEARER_TOKEN, GATHERTHREAD_DSH_PROJECT_TEST_TOKEN, GATHERTHREAD_DSH_TEST_TOKEN, GATHERTHREAD_DSH_TEST_TOOL_SECRET, GATHERTHREAD_HOSTED_GITHUB_CLIENT_SECRET, GATHERTHREAD_SILICONFLOW_API_KEY, GATHERTHREAD_TOKEN and RELAYROOM_AUTHORIZATION_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How current is this page?

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

Advertisement