Atlas / MCP servers / beepboop2025 / liquilens-evidence-carrier

liquilens-evidence-carrierBLOCK

mcp/beepboop2025/liquilens-evidence-carrier

Read-only Trade Safety receipts and MCP interoperability for AI agents, with fail-closed financial evidence and a paper-only Alpaca adapter.

Verdict
BLOCK
Grade
F
Trust score
44 /100
Exposed tools
—
Transport
stdio · streamable-http
License
Apache-2.0
Stars
0
01

Overview

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

[](https://github.com/beepboop2025/liquilens-evidence-carrier/actions/workflows/ci.yml) [](https://github.com/beepboop2025/liquilens-evidence-carrier/releases) [](LICENSE)

LiquiLens Evidence Carrier is a transport-neutral contract for moving financial evidence through files, warehouses, event buses, observability systems, data catalogs, FDC3 desktops, notebooks, citations, and AI agents without dropping provenance, rights, freshness, or authority boundaries.

The carrier is infrastructure for inspection and reproducibility. It is not an order, recommendation, credit rating, market-data entitlement, or endorsement by Bloomberg, LSEG, FactSet, FINOS, or any other platform.

The current signed core release is v0.20.1. Its offline routing resource uses Palimpsest's published catalog API while the additional MCP tool awaits approval. All 22 artifact checksums passed; the downloaded wheel and MCP bundle have verified provenance for the exact signed source, and the official MCP Registry advertises the new bundle. See docs/RELEASE-0.20.1.md for the publication receipt. The 0.20.0 receipt remains available. Independent consumer channels retain their own recorded versions.

The following historical core publication receipt describes v0.19.0. Published release v0.19.0 provides the preserved historical wheel and Registry record. Annotated tag object `c3239bfc7c4d3c4b7fc5ce26e0f60296

Read from source at commit 9e101a1a37f1OBSERVED · 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. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add liquilens-evidence --env CREDENTIALS_DIRECTORY=${CREDENTIALS_DIRECTORY} --env GITHUB_TOKEN=${GITHUB_TOKEN} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "liquilens-evidence": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "CREDENTIALS_DIRECTORY": "${CREDENTIALS_DIRECTORY}",
        "GITHUB_TOKEN": "${GITHUB_TOKEN}"
      }
    }
  }
}
03

Trust audit

BLOCKgrade F · trust 44/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 (9 observation(s))
Network
declared (4 observation(s))
Shell
declared (1 observation(s))
Dependencies
pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
evaluation/run_upgrade_replay.py:74
exec(compile(adapted, str(path), "exec"), module.__dict__)  # noqa: S102
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
integrations/trade-safety-gateway/Dockerfile:53
CMD ["python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8080/healthz', timeout=2).read()"]
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
integrations/trading-copilot/deploy/backup_agent_host.py:432
f"http://127.0.0.1:{port}/v1/capabilities",
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
integrations/trading-copilot/src/liquilens_trading_copilot/agent_client.py:125
parser.add_argument("--url", default="http://127.0.0.1:8766")
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
integrations/trading-copilot/src/liquilens_trading_copilot/agent_mcp.py:237
parser.add_argument("--url", default="http://127.0.0.1:8766")
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
protocol/conformance/trade-safety-v1/corpus.json:28
"receipt_utf8_base64": "eyJhdXRob3JpdHkiOnsiY2FuX2FsbG9jYXRlX2NhcGl0YWwiOmZhbHNlLCJjYW5fZXhlY3V0ZSI6ZmFsc2UsImNhbl9yZWNvbW1lbmQiOmZhbHNlLCJmaW5hbmNpYWxfYXV0aG9yaXR5Ijoib3BlcmF0b3JfcG9saWN5X2NoZWNrX29u
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
protocol/conformance/trade-safety-v1/corpus.json:55
"receipt_utf8_base64": "eyJhdXRob3JpdHkiOnsiY2FuX2FsbG9jYXRlX2NhcGl0YWwiOmZhbHNlLCJjYW5fZXhlY3V0ZSI6ZmFsc2UsImNhbl9yZWNvbW1lbmQiOmZhbHNlLCJmaW5hbmNpYWxfYXV0aG9yaXR5Ijoib3BlcmF0b3JfcG9saWN5X2NoZWNrX29u
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
protocol/conformance/trade-safety-v1/corpus.json:82
"receipt_utf8_base64": "eyJhdXRob3JpdHkiOnsiY2FuX2FsbG9jYXRlX2NhcGl0YWwiOmZhbHNlLCJjYW5fZXhlY3V0ZSI6ZmFsc2UsImNhbl9yZWNvbW1lbmQiOmZhbHNlLCJmaW5hbmNpYWxfYXV0aG9yaXR5Ijoib3BlcmF0b3JfcG9saWN5X2NoZWNrX29u
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
protocol/conformance/trade-safety-v1/corpus.json:109
"receipt_utf8_base64": "eyJhdXRob3JpdHkiOnsiY2FuX2FsbG9jYXRlX2NhcGl0YWwiOmZhbHNlLCJjYW5fZXhlY3V0ZSI6ZmFsc2UsImNhbl9yZWNvbW1lbmQiOmZhbHNlLCJmaW5hbmNpYWxfYXV0aG9yaXR5Ijoib3BlcmF0b3JfcG9saWN5X2NoZWNrX29u
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
protocol/conformance/trade-safety-v1/corpus.json:136
"receipt_utf8_base64": "eyJhdXRob3JpdHkiOnsiY2FuX2FsbG9jYXRlX2NhcGl0YWwiOmZhbHNlLCJjYW5fZXhlY3V0ZSI6ZmFsc2UsImNhbl9yZWNvbW1lbmQiOmZhbHNlLCJmaW5hbmNpYWxfYXV0aG9yaXR5Ijoib3BlcmF0b3JfcG9saWN5X2NoZWNrX29u
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
integrations/trading-copilot/deploy/test_backup_agent_host.py:131
secret = "fixture-signing-key-with-enough-entropy"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
integrations/trading-copilot/tests/test_agent_client.py:8
TOKEN = "synthetic-agent-client-token-0123456789abcdef"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
integrations/trading-copilot/tests/test_agent_host.py:63
TOKEN = "synthetic-agent-execution-token-0123456789abcdef"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
integrations/trading-copilot/tests/test_observatory.py:40
SECRET = "test-secret-MUST-NOT-APPEAR-IN-REPORT"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
integrations/trading-copilot/tests/test_source_access.py:27
TOKEN = "test_source_identity.only_test_material_123456789"
LOWInventory / provenance · inv.hidden_file · CWE-1104
.pre-commit-hooks.yaml
.pre-commit-hooks.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
browser/.nojekyll
.nojekyll
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
integrations/vscode/.vscodeignore
.vscodeignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
browser/tests/validate_site.py:120
assert "eval(" not in javascript
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
notebooks/tests/validate_notebook.py:152
exec(  # noqa: S102 - execution is confined to the audited notebook cells
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
browser/tests/verifier.test.mjs:9
import { canonicalHashFromJsonText as nodeCanonicalHash } from "../../protocol/verify_hash_tree_v1.mjs";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
integrations/typescript/test/conformance.test.mjs:13
"../../../protocol/conformance/trade-safety-v1/corpus.json",
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
integrations/vscode/src/extension.mjs:3
import { verifyCarrierText } from "../../../browser/verifier.mjs";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
integrations/vscode/test/diagnostics.test.mjs:4
import { FULL_EXAMPLE, REFERENCE_EXAMPLE } from "../../../browser/examples.mjs";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
integrations/vscode/test/diagnostics.test.mjs:5
import { verifyCarrierText } from "../../../browser/verifier.mjs";

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 9e101a1a37f1full audit observations/trust-audit/mcp-server/beepboop2025__liquilens-evidence-carrier.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-119e101a1a37f1BLOCKF44first audit
05

Questions

What is the liquilens-evidence-carrier MCP server?

Read-only Trade Safety receipts and MCP interoperability for AI agents, with fail-closed financial evidence and a paper-only Alpaca adapter.

Is liquilens-evidence-carrier safe to connect to an agent?

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

What credentials does liquilens-evidence-carrier need?

It reads CREDENTIALS_DIRECTORY and GITHUB_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 does liquilens-evidence-carrier run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as liquilens-evidence at 0.1.0.

How current is this page?

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

Advertisement