Atlas / MCP servers / genesistechat / genesispay-js

genesispay-jsCAUTION

mcp/genesistechat/genesispay-js

GenesisPay JavaScript SDKs and MCP server: x402 payments in USDC on Base for sellers and AI agents (@genesis-tech/genesispay-*)

Verdict
CAUTION
Grade
B
Trust score
81 /100
Exposed tools
23 21r · 2w · 0d
Transport
stdio · streamable-http
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.

JavaScript/TypeScript SDKs for GenesisPay — stablecoin payments over HTTP 402 (x402) that work for both humans and AI agents. USDC on Base; every amount is integer minor units, never floats.

Sell: gate an endpoint

import { createPaymentGate, genesisPaySettlement } from "@genesis-tech/genesispay-seller";

const gate = createPaymentGate({
amountUsdc: "0.10",
payTo: "0xYourWallet",
description: "Premium market data",
network: "base-sepolia",
});

export const GET = gate.wrap(async () => Response.json({ data: "..." }), {
verifySettlement: genesisPaySettlement({
facilitatorBaseUrl: "https://your-genesispay-instance.example",
apiKey: process.env.GENESISPAY_SELLER_KEY!, // gp_sk_...
}),
});

Buy: pay from an agent

import { GenesisPayAgent } from "@genesis-tech/genesispay-agent";

const agent = new GenesisPayAgent(); // env: GENESISPAY_AGENT_KEY, GENESISPAY_BASE_URL

const [service] = await agent.discover("weather ap
Read from source at commit 15b89d793a78OBSERVED · 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 (npm)
claude mcp add genesispay-mcp --env GENESISPAY_AGENT_KEY=${GENESISPAY_AGENT_KEY} -- npx -y @genesis-tech/[email protected]
03

Exposed tools (23)

21 read · 2 write · 0 destructive.

ToolRiskDescription
RoasteryreadCoffee roaster.
genesispay_accountread
genesispay_catalog_reviewsread
genesispay_catalog_searchread
genesispay_catalog_shopsread
genesispay_catalog_trendingread
genesispay_describe_external_serviceread
genesispay_describe_serviceread
genesispay_discoverread
genesispay_discover_externalread
genesispay_paywrite
genesispay_payment_statusread
genesispay_purchase_keyread
genesispay_quoteread
genesispay_resultread
genesispay_review_prepareread
genesispay_review_publishwrite
genesispay_review_withdrawread
genesispay_reviewsread
genesispay_shipping_profileread
genesispay_shopsread
genesispay_trendingread
probe_authread
04

Trust audit

CAUTIONgrade B · trust 81/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
none-observed
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (17)

MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/protocol/src/contract-authority.test.ts:7
const target: ContractDeployment = { chainId: 84532, token: "0x1111111111111111111111111111111111111111",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/seller-sdk/src/webhooks.fuzz.test.ts:35
const secret = "gp_whsec_fuzz_secret";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/seller-sdk/src/webhooks.test.ts:37
const SECRET = "whsec_test_5f3c9a2b1d8e4c7a";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/agent-sdk/src/service-contract.test.ts:75
await expect(agent.describeService("../../agent/pay")).rejects.toMatchObject({ code: "invalid_request" });
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/agent-sdk/src/client.test.ts:1171
const loopback = "http://127.0.0.1:3000";
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/seller-sdk/src/checkout-return.test.ts:89
expect(isPayerRedirectUrl("http://127.0.0.1:3000/thanks")).toBe(true);
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/seller-sdk/src/checkout-return.test.ts:100
expect(isPayerRedirectUrl("http://127.0.0.1.evil.com/thanks")).toBe(false);
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/seller-sdk/src/client.test.ts:601
"http://127.0.0.1:3000/thanks",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/seller-sdk/src/client.test.ts:653
"http://127.0.0.1.evil.com/thanks",
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
packages/agent-sdk/src/payment-result.ts:75
const binary = atob(capture.bodyBase64);
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
packages/protocol/src/base64-json.ts:18
const binary = atob(encoded.trim());
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
packages/protocol/src/settlement-prepare-params.test.ts:62
expect(JSON.parse(atob(encoded))).toEqual(params);
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@types/node, jsdom, typescript, vitest
Why it matters. 4 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/agent-sdk/package.json
zod, typescript
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/mcp-server/package.json
@modelcontextprotocol/sdk, @genesis-tech/genesispay-agent, zod, typescript
Why it matters. 4 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/protocol/package.json
viem, typescript
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/seller-sdk/package.json
@genesis-tech/genesispay-protocol, viem, typescript
Why it matters. 3 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 15b89d793a78full audit observations/trust-audit/mcp-server/genesistechat__genesispay-js.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-1115b89d793a78CAUTIONB81first audit
06

Questions

What is the genesispay-js MCP server?

GenesisPay JavaScript SDKs and MCP server: x402 payments in USDC on Base for sellers and AI agents (@genesis-tech/genesispay-*)

What tools does genesispay-js expose?

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

Is genesispay-js safe to connect to an agent?

With care. The audit graded it B (81/100) and found 17 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does genesispay-js need?

It reads GENESISPAY_AGENT_KEY and GENESISPAY_WEBHOOK_SECRET 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 genesispay-js run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @genesis-tech/genesispay-seller at 1.8.1.

How current is this page?

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

Advertisement