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
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