Atlas / MCP servers / mano7onam / puenteo

puenteoBLOCK

mcp/mano7onam/puenteo

Let your coding agents talk to each other: search every Claude Code / Codex / Gemini / Cursor session and message live sessions. CLI · MCP · hooks · HTTP/SSE · A2A.

Verdict
BLOCK
Grade
F
Trust score
42 /100
Exposed tools
1 1r · 0w · 0d
Transport
stdio
License
MIT
Stars
1
01

Overview

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

Let your coding agents talk to each other.

When you run Claude Code in one terminal, Codex in another and Gemini or Cursor in the IDE, they can't see each other. One renames a column, another breaks on it, and you end up copy-pasting context between windows. puenteo gives every session on your machine:

  • 🔎 Shared memory: ranked full-text search over the history of every local agent (Claude Code, Codex, Gemini/Antigravity, Cursor, Copilot, OpenCode, Grok, Pi, Qwen, Continue, Aider, OpenHands, Goose), plus structured handoffs: goal, state, files, commits, failures.
  • 💬 Live messaging: see who's running (puenteo ps), ask another session a question and wait for its answer, broadcast to the project, share #channels.
  • 🔒 Coordination: claim files or dirs so parallel agents don't edit the same code. Optional git pre-commit guard.
  • 🔌 Every interface: CLI, MCP (stdio + HTTP), hooks, instant watch, HTTP/SSE, an A2A v1.0 facade, a web dashboard and Python, set up by one puenteo install.

Codex asks Claude about a schema change and gets the answer two seconds later. Claude claims `src/db`, Cursor reports its frontend fix and Gemini checks a number for the release notes. All of it runs locally: one SQLite file, no daemon, no network.

Puenteo comes from Spanish puente (bridge).

No runtime dependencies · Python ≥ 3.9 · macOS · Linux · Windows · optional Rust core

[](https://mano7onam.github.io/puenteo/) [](https://pypi.org/project/puenteo/) [](https://github.com/mano7onam/puenteo/actions/workflows/ci.yml) [![MCP Registry](https://img.shields.io/badge/MCP%20Registry

Read from source at commit bab09c162ff5OBSERVED · 2026-10-11
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.

claude-code (pypi)
claude mcp add puenteo -- uvx puenteo==0.13.0 mcp
03

Exposed tools (1)

1 read · 0 write · 0 destructive.

ToolRiskDescription
example_count_sessionsreadCount local agent sessions per provider (example plugin).
04

Trust audit

BLOCKgrade F · trust 42/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 codeWARN
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (3 observation(s))
Network
declared (8 observation(s))
Shell
declared (1 observation(s))
Dependencies
pinned
Secrets in source
found

Findings (25)

CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
plugin/skills/puenteo-bus/SKILL.md:13
Every session has an address `agent:session-id` (e.g. `claude:8765...`, `codex:01a1...`). `puenteo whoami` prints yours; `puenteo ps` lists everyone running now. If the puenteo MCP server is connected
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
puenteo/data/skills/puenteo-bus/SKILL.md:13
Every session has an address `agent:session-id` (e.g. `claude:8765...`, `codex:01a1...`). `puenteo whoami` prints yours; `puenteo ps` lists everyone running now. If the puenteo MCP server is connected
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
skills/puenteo-bus/SKILL.md:13
Every session has an address `agent:session-id` (e.g. `claude:8765...`, `codex:01a1...`). `puenteo whoami` prints yours; `puenteo ps` lists everyone running now. If the puenteo MCP server is connected
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
plugin/skills/puenteo-plugin-dev/SKILL.md:46
- Open other agents' stores read-only (SQLite `mode=ro`). Never write into them, and never read credential or auth files.
Why it matters. asks the agent to read credentials
HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
puenteo/data/skills/puenteo-plugin-dev/SKILL.md:46
- Open other agents' stores read-only (SQLite `mode=ro`). Never write into them, and never read credential or auth files.
Why it matters. asks the agent to read credentials
HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
skills/puenteo-plugin-dev/SKILL.md:46
- Open other agents' stores read-only (SQLite `mode=ro`). Never write into them, and never read credential or auth files.
Why it matters. asks the agent to read credentials
MEDIUMInventory / provenance · inv.binary · CWE-1104
native/python/puenteo_core/_core.abi3.so
_core.abi3.so
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
puenteo/mesh/cli.py:352
print(f"joined room #{args.name}{' (private)' if args.secret else ''}. Post: puenteo send '#{args.name}@*' \"...\""
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
plugin/skills/puenteo-dashboard/SKILL.md:13
puenteo serve --open            # http://127.0.0.1:7357 in the browser
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
puenteo/data/skills/puenteo-dashboard/SKILL.md:13
puenteo serve --open            # http://127.0.0.1:7357 in the browser
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
puenteo/server.py:176
base = f"http://127.0.0.1:{self.port}"
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
puenteo/server.py:398
url = f"http://127.0.0.1:{gw.port}/?token={token}"
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
puenteo/server.py:399
print(f"puenteo serve on http://127.0.0.1:{gw.port}  (dashboard: {url})", file=sys.stderr, flush=True)
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
puenteo/util.py:285
_WORD_RE = re.compile(r"[a-zA-Zа-яА-ЯёЁ0-9_./-]{2,}")
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
tests/test_core.py:206
"key sk-ant-api03-AAAAAAAAAAAAAAAAAAAAAAAAAAAA and ghp_" + "a" * 36 + "\n"
MEDIUMHard-coded secrets · secret.aws · CWE-798, CWE-321
tests/test_core.py:209
"postgres://admin:[email protected]/x  AKIAABCDEFGHIJKLMNOP\n"
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
tests/test_core.py:209
"postgres://admin:[email protected]/x  AKIAABCDEFGHIJKLMNOP\n"
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
tests/test_core.py:210
"-----BEGIN RSA PRIVATE KEY-----\nMIIE...\n-----END RSA PRIVATE KEY-----\n"
LOWInventory / provenance · inv.hidden_file · CWE-1104
.gitleaks.toml
.gitleaks.toml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
site/.nojekyll
.nojekyll
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
puenteo/mesh/ws.py:108
want = base64.b64encode(hashlib.sha1((key + GUID).encode()).digest()).decode()  # nosec B324 - RFC 6455
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
puenteo/mesh/ws.py:168
accept = base64.b64encode(hashlib.sha1((key + GUID).encode()).digest()).decode()  # nosec B324 - RFC 6455
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
puenteo/notify.py:35
tag = hashlib.sha1(scope.encode(), usedforsecurity=False).hexdigest()[:10]
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
puenteo/notify.py:52
return hashlib.sha1(address.encode("utf-8"), usedforsecurity=False).hexdigest()[:20]
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
puenteo/providers/aider.py:108
sid = hashlib.sha1(path.encode(), usedforsecurity=False).hexdigest()[:16]

Gates applied: critical_finding, no_behavioural_pass, undeclared_transfer.

Audited 2026-10-11 · audit v0.4.1 · source sha bab09c162ff5full audit observations/trust-audit/mcp-server/mano7onam__puenteo.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-11bab09c162ff5BLOCKF42first audit
06

Questions

What is the puenteo MCP server?

Let your coding agents talk to each other: search every Claude Code / Codex / Gemini / Cursor session and message live sessions. CLI · MCP · hooks · HTTP/SSE · A2A.

What tools does puenteo 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 puenteo safe to connect to an agent?

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

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

How does puenteo run?

It speaks stdio, so it runs as a local process your client starts. It is published on PyPI as puenteo.

How current is this page?

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

Advertisement