Atlas / MCP servers / lunarwerxs / RepoYeti

RepoYetiBLOCK

mcp/lunarwerxs/repoyeti

Run git from your phone, safely. A self-hosted daemon + mobile PWA for any git host (GitHub, GitLab, Gitea, Cloudflare Artifacts): live repo grid, git-graph history, Monaco diffs and AI Smart Commit, with guardrails (no force-push, fast-forward-only pulls).

Verdict
BLOCK
Grade
F
Trust score
40 /100
Exposed tools
34 28r · 6w · 0d
Transport
—
License
NOASSERTION
Stars
20
01

Overview

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

Every git repo on your machine, on your phone.

A self-hosted git dashboard: one small daemon on your computer, a live status grid, commit graph and real Monaco diffs on any screen you own.

A remote git client for an Android phone, an iPhone or any browser, and a self-hosted stand-in for GitHub Desktop when you are not at the machine. It drives your real local repos against any git remote: GitHub, GitLab, Bitbucket, Gitea, Forgejo, Cloudflare Artifacts or your own server.

[](https://github.com/LunarWerxs/RepoYeti/releases) [](https://github.com/LunarWerxs/RepoYeti/actions) [](#license) [](#how-it-works) [](#privacy) [](https://discord.gg/PsWpeNUzhk)

**⬇ Download** · repoyeti.com · Features · Install · FAQ · Changelog

Read from source at commit 9af200b1e000OBSERVED · 2026-10-10
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add repoyeti-web --env CF_TUNNEL_TOKEN=${CF_TUNNEL_TOKEN} --env GIT_CONFIG_KEY_0=${GIT_CONFIG_KEY_0} --env REPOYETI_KEYCHAIN_MEMORY=${REPOYETI_KEYCHAIN_MEMORY} --env REPOYETI_KEYCHAIN_SERVICE=${REPOYETI_KEYCHAIN_SERVICE} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "repoyeti-web": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "CF_TUNNEL_TOKEN": "${CF_TUNNEL_TOKEN}",
        "GIT_CONFIG_KEY_0": "${GIT_CONFIG_KEY_0}",
        "REPOYETI_KEYCHAIN_MEMORY": "${REPOYETI_KEYCHAIN_MEMORY}",
        "REPOYETI_KEYCHAIN_SERVICE": "${REPOYETI_KEYCHAIN_SERVICE}"
      }
    }
  }
}
03

Exposed tools (34)

28 read · 6 write · 0 destructive.

ToolRiskDescription
RepoYetireadSystem-wide remote git manager
authorEmailreadExact canonical author email (case-insensitive; takes precedence over name).
authorNamereadExact canonical author name when no email is supplied (case-insensitive).
collaboration_commit_syncwriteMUTATES REMOTE: commit, fast-forward pull, and push the sharer
collaboration_diffreadRead one changed-file diff from the sharer
collaboration_statusreadRead the sharer
create_branchwriteMUTATES: create a new branch in a repository (optionally switch to it).
driftreadList every repository that is currently ahead of or behind its remote.
fixup_basewriteFind which unpushed commit a working-tree change fixes, by blaming the lines each changed
git_checkoutreadMUTATES: switch a repository to an existing branch.
git_commitwriteMUTATES: stage every change in a repository
git_diffreadShow the diff (HEAD vs working tree) of one changed file in a repository.
git_fetchreadMUTATES: fetch a repository
git_logreadList a repository
git_pullreadMUTATES: pull (fast-forward) a repository from its remote.
git_pushwriteMUTATES: push a repository to its remote.
git_searchreadSearch the content of a repository
kindreadNarrow to one loop.
limitreadMax commits to return (page size, capped at 500).
list_branchesreadList a repository
list_collaborationsreadList accepted repositories shared with this RepoYeti and live peer working trees
list_reposreadList every repository RepoYeti knows about (id, name, path, vcs, cached status).
list_stashesreadList a repository
mergeswriteFilter merge commits.
pathreadRepo-relative changed path to check (repeatable); absent means every changed file.
qreadSearch query.
refreadWhich side to read.
refsreadRefs to include.
repo_changesreadList a repository
repo_statusreadGet one repository
scalereadActivity bucket scale (defaults to hourly).
skipreadCommits to skip (pagination offset).
triage_briefingreadOne compact
unackedOnlyreadOnly rows not yet acknowledged (\
04

Trust audit

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

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

What the source does

Filesystem
declared (11 observation(s))
Network
declared (5 observation(s))
Shell
declared (4 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
web/scripts/shoot-demo-gif.mjs:176
const el = new Function(`return (${src})()`)();
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
web/scripts/shoot-demo-gif.mjs:184
const el = new Function(`return (${src})()`)();
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/git-actions/diff.ts:156
".env", ".envrc", ".netrc", "_netrc", ".npmrc", ".pypirc", ".htpasswd",
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/git-actions/diff.ts:158
"id_rsa", "id_dsa", "id_ecdsa", "id_ed25519",
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/git-actions/diff.ts:162
"wp-config.php", ".git-credentials", ".pgpass", ".dockercfg",
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/identity-detect.ts:336
const ignored = new Set(["config", "known_hosts", "known_hosts.old", "authorized_keys", "environment", "rc"]);
Why it matters. touches a credential store
HIGHPrompt injection · prompt.zero_width · CWE-94, CWE-1427
docs/ARCHITECTURE.md:1159
| DNS | proxied CNAME `app.repoyeti.com → ce2ba43f-....cfargotunnel.com` |
Why it matters. invisible characters in instruction text
Fix. strip non-printing characters
MEDIUMInventory / provenance · inv.binary · CWE-1104
misc/RepoYeti-Tray.exe
RepoYeti-Tray.exe
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/hurl-conformance.ts:167
console.log(`running against ${base} (uid ${uid}${token ? ", bearer token from REPOYETI_TOKEN" : ""})`);
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
src/cli/token.ts:22
console.log(`${green("✓")} API token minted (shown once — store it now):\n`);
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
src/cli/token.ts:23
console.log(`  ${bold(token)}\n`);
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
src/cli/token.ts:43
console.log(`${green("✓")} API token revoked (Bearer auth disabled; OIDC-only).`);
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/buzz.test.ts:55
const secret = "nsec1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/buzz.test.ts:148
const secret = "nsec1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/buzz.test.ts:225
const secret = "nsec1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/collaboration.test.ts:59
const token = "one-private-share-token";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/connections-sync.test.ts:339
ai: { providers: { anthropic: { apiKey: "sk-ant-should-never-leave", model: "x" } } },
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/db/errors.ts:71
return createHash("sha1").update([repoId, op, code].join("\0")).digest("hex").slice(0, 16);
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/identity-detect.ts:56
return createHash("sha1").update(parts.join("\0")).digest("hex").slice(0, 16);
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
tests/file-access-guard.test.ts:31
for (const p of [".env", "config/.env.local", ".ENV.production", "certs/server.pem", "tls.key", "id_ed25519", ".git-credentials"]) {
Why it matters. touches a credential store
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/http/routes/accounts.ts:3
import { jsonError } from "../../contract.ts";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/http/routes/accounts.ts:4
import { parseBody, AccountSwitchSchema, AccountIdentitySchema } from "../../schemas.ts";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/http/routes/accounts.ts:5
import { accountsSnapshot, switchGhAccount, type AccountsSnapshot, type GhAccount } from "../../gh-cli.ts";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/http/routes/accounts.ts:6
import { accountIdentityMap, getAccountIdentity, getIdentity, setAccountIdentity } from "../../db.ts";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/http/routes/ai.ts:18
} from "../../config.ts";

Gates applied: no_behavioural_pass.

Audited 2026-10-10 · audit v0.4.1 · source sha 9af200b1e000full audit observations/trust-audit/mcp-server/lunarwerxs__repoyeti.json · Report an issue / request a re-scan
05

Audit history

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

DateSourceVerdictGradeScoreChange
2026-10-109af200b1e000BLOCKF40first audit
06

Questions

What is the RepoYeti MCP server?

Run git from your phone, safely. A self-hosted daemon + mobile PWA for any git host (GitHub, GitLab, Gitea, Cloudflare Artifacts): live repo grid, git-graph history, Monaco diffs and AI Smart Commit, with guardrails (no force-push, fast-forward-only pulls).

What tools does RepoYeti expose?

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

Is RepoYeti safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (40/100) and found 7 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 RepoYeti need?

It reads CF_TUNNEL_TOKEN, GIT_CONFIG_KEY_0, REPOYETI_KEYCHAIN_MEMORY, REPOYETI_KEYCHAIN_SERVICE, REPOYETI_NO_KEYCHAIN and REPOYETI_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 (9af200b1e000), read on 2026-10-10. The repository is watched and re-audited when it changes.

Advertisement