preflight

https://github.com/1lystore/1ly-mcp-server

1ly-mcp-server

Hostile

Score 0 / 100 · 71 files read · 0 critical, 6 high, 3 medium, 16 low findings

Report f131c9a275b17a24 · first scanned 2026-10-28 · scanned 4× · keyed to the exact package contents, so this link always shows this version

Listed in the Agent Census directory data

Subscores

credentials0
exfiltration70
execution100
injection100
obfuscation98
files84

100 is clean. Deductions come only from the cited findings below.

Findings

highReferences the SSH directory (~/.ssh)
SECURITY_PATCH_0.1.4.md · line 47 · rule H1
credential stores (`.ssh`, `.gnupg`, `.aws`, `.kube`) - Path normalization: Prevents traversal attacks via `../` sequences **Prin
highReferences an SSH private key file
SECURITY_PATCH_0.1.4.md · line 227 · rule H1
LET_EVM_KEY="~/.ssh/id_rsa" ``` 3. **Rate Limiting**: - Max 100 requests/minute - Error: `Rate limit exceeded: too many
highReferences the SSH directory (~/.ssh)
src/provider/raw-local.ts · line 55 · rule H1
st blockedPaths = [".ssh", ".gnupg", ".aws", ".kube"]; if (blockedPaths.some((p) => normalizedPath.includes(`/${p}/`))) {
highThis package both touches credential material and sends data over the network (in different files) — review the flow before installing
src/provider/raw-local.ts · line 1 · rule H1
highReferences the SSH directory (~/.ssh)
src/wallet/evm.ts · line 39 · rule H1
st blockedPaths = [".ssh", ".gnupg", ".aws", ".kube"]; if (blockedPaths.some((p) => normalizedPath.includes(`/${p}/`))) {
highReferences the SSH directory (~/.ssh)
src/wallet/solana.ts · line 37 · rule H1
st blockedPaths = [".ssh", ".gnupg", ".aws", ".kube"]; if (blockedPaths.some((p) => normalizedPath.includes(`/${p}/`))) {
mediumCode contacts static.modelcontextprotocol.io, which the documentation never mentions
(package) · line 1 · rule M3
static.modelcontextprotocol.io
mediumWrites files under the user home directory
src/budget.ts · line 53 · rule M5
ath(); try { fs.writeFileSync(filePath, JSON.stringify(state, null, 2), { encoding: "utf-8", mode: 0o600, // Ow
mediumWrites files under the user home directory
src/keys.ts · line 1 · rule M5
{ mkdir, readFile, writeFile } from "node:fs/promises"; import { dirname, join } from "node:path"; import os from "node:os"; typ
low2 binary file(s) were not parsed (static text analysis only)
(package) · line 1 · rule L3
2 binary files
lowReads named environment variables (normal for API keys; listed in the permission summary)
src/budget.test.ts · line 24 · rule L1
.now()}.json`); process.env.ONELY_BUDGET_STATE_FILE = stateFile; try { fs.unlinkSync(stateFile); } catch {
lowReads named environment variables (normal for API keys; listed in the permission summary)
src/budget.ts · line 15 · rule L1
{ const envPath = process.env.ONELY_BUDGET_STATE_FILE; if (envPath && envPath.trim().length > 0) { if (envPath.startsWith(
lowReads named environment variables (normal for API keys; listed in the permission summary)
src/config.ts · line 58 · rule L1
const walletType = process.env.ONELY_WALLET_TYPE; const walletKey = process.env.ONELY_WALLET_KEY; const walletSolana = proces
lowReads named environment variables (normal for API keys; listed in the permission summary)
src/http-server.ts · line 22 · rule L1
{ const envPort = process.env.MCP_HTTP_PORT ? Number(process.env.MCP_HTTP_PORT) : undefined; const platformPort = process.env.
lowReads named environment variables (normal for API keys; listed in the permission summary)
src/index.ts · line 10 · rule L1
cludes("--http") || process.env.MCP_TRANSPORT === "http"; async function main() { if (isSelfTest) { const code = await runS
lowReads named environment variables (normal for API keys; listed in the permission summary)
src/keys.ts · line 21 · rule L1
const appData = process.env.APPDATA || join(home, "AppData", "Roaming"); return join(appData, "1ly", "onely_api_key.json")
lowReads named environment variables (normal for API keys; listed in the permission summary)
src/provider/coinbase.ts · line 198 · rule L1
const envKey = process.env.ONELY_API_KEY; if (envKey) return envKey; return loadStoredApiKey(); } return
lowReads named environment variables (normal for API keys; listed in the permission summary)
src/provider/dcp-local.ts · line 16 · rule L1
onst DCP_BASE_URL = process.env.DCP_URL || "http://localhost:8420"; const DCP_TIMEOUT_MS = 10000; const DCP_CHECK_TIMEOUT_MS = 100
lowReads named environment variables (normal for API keys; listed in the permission summary)
src/provider/dcp-remote.ts · line 25 · rule L1
const AGENT_NAME = process.env.MCP_AGENT_NAME || "1ly-mcp"; /** * DCP Remote error with code mapping */ export class DcpRemote
lowReads named environment variables (normal for API keys; listed in the permission summary)
src/provider/index.ts · line 54 · rule L1
const explicit = process.env.ONELY_PROVIDER; // Step 1: Explicit override always wins if (explicit) { switch (explicit
lowReads named environment variables (normal for API keys; listed in the permission summary)
src/provider/provider.test.ts · line 14 · rule L1
originalEnv = { ...process.env }; // Mock checkDcpStatus before importing vi.mock("./dcp-local.js", async (importOriginal) => {
lowReads named environment variables (normal for API keys; listed in the permission summary)
src/provider/raw-local.ts · line 116 · rule L1
{ const envPath = process.env.ONELY_BUDGET_STATE_FILE; if (envPath && envPath.trim().length > 0) { if (envPath.startsWith(
lowReads named environment variables (normal for API keys; listed in the permission summary)
src/selftest.ts · line 115 · rule L1
log(" Agent: " + (process.env.MCP_AGENT_NAME || "1ly-mcp")); log("─".repeat(50)); return 0; } catch (error) { cons
lowReads named environment variables (normal for API keys; listed in the permission summary)
src/solana-tx.ts · line 9 · rule L1
ise<string> { if (process.env.ONELY_SOLANA_DRY_RUN === "1") { return "SIMULATED_TX_SIGNATURE"; } const tx = VersionedTra
lowReads named environment variables (normal for API keys; listed in the permission summary)
src/tools/call.test.ts · line 92 · rule L1
ak across tests process.env.ONELY_BUDGET_STATE_FILE = `/tmp/1ly-mcp-budget-test-${Date.now()}.json`; // Reset mock provide

Permission surface

Network endpoints
1ly.storeapi.example.comapi.mainnet-beta.solana.comcursor.comdiscord.ggdocs.1ly.storedocs.cdp.coinbase.comeslint.orgexample.comfeross.orggithub.commalicious.commy-proxy.comopencollective.compaulmillr.compaypal.meregistry.npmjs.orgstatic.modelcontextprotocol.iotidelift.comtwitter.comwww.contributor-covenant.orgwww.conventionalcommits.orgwww.patreon.comx.comx402.org
Environment read
APPDATADCP_RELAY_PLAINTEXTDCP_RELAY_TOKENDCP_RELAY_URLDCP_URLDCP_VAULT_HPKE_PUBDCP_VAULT_HPKE_PUBLIC_KEYDCP_VAULT_IDMCP_AGENT_NAMEMCP_HTTP_HOSTMCP_HTTP_PORTMCP_TRANSPORTONELY_API_BASEONELY_API_KEYONELY_BUDGET_DAILYONELY_BUDGET_PER_CALLONELY_BUDGET_STATE_FILEONELY_NETWORKONELY_PROVIDERONELY_SOLANA_DRY_RUNONELY_SOLANA_RPC_URLONELY_WALLET_EVM_KEYONELY_WALLET_KEYONELY_WALLET_PROVIDERONELY_WALLET_SOLANA_KEYONELY_WALLET_TYPEPORT
Shell execution
no
Install hooks
none
Credential material
References the SSH directory (~/.ssh)
References an SSH private key file
Reads named environment variables (normal for API keys; listed in the permission summary)

Provenance

Source
GitHub
Repository
1lystore/1ly-mcp-server
Owner
1lystore
Stars
3
Forks
1
Repo created
2026-01-29
Last push
2026-03-05
License
MIT

Watch this package

Interest list only. We store the address and this report link, nothing else. No mail is sent in v1.

Share this report: https://preflight.orbitaldeskllc.com/r/f131c9a275b17a24