Run402
NPM · RUN402-MCP · 2 COMPONENTS · SCANNED SEP 20
x402 pay-per-call infra for agents: $0.03 image generation, Postgres, auth, storage, functions.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security99
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 33 of 135 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to kychee-com/run402). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 0 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability77
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 22855 tokens (~115/item across 198 items; 198 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management87
- Stability observed for 26 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 99% of tool parameters carry a description.Partial
Tool Safety76
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 1 of 42 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "run_sql" implies "execute" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Partial
- An AI judge read all 198 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the Run402 MCP server?
Run402 runs locally as an npm package, launched with npx -y run402-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · run402-mcp
claude mcp add com-run402-mcp -- npx -y run402-mcp
{
"mcpServers": {
"com-run402-mcp": {
"command": "npx",
"args": [
"-y",
"run402-mcp"
]
}
}
} {
"servers": {
"com-run402-mcp": {
"command": "npx",
"args": [
"-y",
"run402-mcp"
]
}
}
} codex mcp add com-run402-mcp -- npx -y run402-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-run402-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"run402-mcp"
],
"enabled": true
}
}
} openclaw mcp add com-run402-mcp --command npx --arg -y --arg run402-mcp
mcp_servers:
com-run402-mcp:
command: "npx"
args: ["-y", "run402-mcp"] {
"McpServers": {
"com-run402-mcp": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"run402-mcp"
]
}
}
} assistant mcp add com-run402-mcp -t stdio -c npx -a -y run402-mcp
{
"mcpServers": {
"com-run402-mcp": {
"command": "npx",
"args": [
"-y",
"run402-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 19 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Sept 26 −3
- Stability: pass → 0.80 functional
- 17 Sept 26 0
- Stability: 0.97 → pass security
- 16 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.
- 12 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.
- 11 Sept 26 −3
- Stability: pass → 0.80 functional
- 10 Sept 26 0
- Stability: 0.97 → pass security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed npm/run402-mcp@4.16.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | kychee-com/run402 |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/kychee-com/run402/.github/workflows/publish.yml@refs/heads/main |
| Rekor log index | 2300581169 |
| Predicate type | https://slsa.dev/provenance/v1 |
| Subject digest | sha512:fe34b109b68518221abc6da2491e04325bccac66d2c9a237a361ed3052a410f3cd3b41568fa28a02e73cce22ce75c7848d3cca6795951ad151e2ca08b |
Background: How many MCP packages publish verified provenance →
Dependencies 135 packages
| Packages resolved | 135 |
|---|---|
| Stale | 33 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
accept_project_transfer ~204
Accept an incoming WALLET transfer (v1.93+). Your wallet must equal the transfer's to_wallet. The accept transaction atomically: (a) flips ownership to your wallet, (b) revokes the previous owner's CI bindings on the project, (c) enqueues notifications to both parties, (d) stamps a persistent `secrets_rotation_advised` advisory. Secret VALUES are inherited (rotation strongly advised via `set_secret` for each name). GitHub repo ownership is NOT part of the transfer. Email transfers complete via `claim_project_transfer`, not this tool. Calls POST /agent/v1/transfers/:transfer_id/accept.
| Name | Type | Req | Description |
|---|---|---|---|
| transfer_id | string | yes | WALLET transfer id to accept. Your wallet must equal the transfer's to_wallet. Atomically flips ownership, revokes the previous owner's CI bindings on the project, and stamps a `secrets_rotation_advi… |
No output schema declared.
No examples provided.
add_org_member ~152
Add a member to an org BY WALLET (POST /orgs/v1/:org_id/members). A brand-new wallet is provisioned as a `human` principal. `role` defaults to `developer`. Requires you to hold an active `owner` membership. (Email-first invite is a separate, not-yet-shipped flow.)
| Name | Type | Req | Description |
|---|---|---|---|
| org_id | string | yes | The org id to add the member to. |
| role | string | – | Initial role. Defaults to `developer` when omitted. Requires you to be an active `owner`. |
| wallet | string | yes | EVM address (or named wallet) to add. A brand-new wallet is provisioned as a `human` principal. |
No output schema declared.
No examples provided.
admin_archive_project ~128
Operator moderation action — archive a single project (sets `projects.archived_at = NOW()`). Independent of organization-level lifecycle: sibling projects on the same organization keep serving. No-op when the project is already archived. Platform-admin only. Calls POST /projects/v1/admin/:id/archive.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | The project ID to archive. Platform-admin only — sets `projects.archived_at = NOW()` and takes only this project down. Sibling projects on the same organization keep serving. |
| reason | string | – | Free-text moderation reason recorded in the audit log (recommended). |
No output schema declared.
No examples provided.
admin_reactivate_project ~170
Operator un-archive — flips `projects.archived_at` back to NULL. In v1.57 this was narrowed: it no longer touches organization-level lifecycle. To reactivate a grace-state organization, subscribe a tier (`tier_set`) or enable lease-perpetual (`admin_set_lease_perpetual`). Platform-admin only. Calls POST /projects/v1/admin/:id/reactivate.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | The project ID to un-archive. Platform-admin only — flips `projects.archived_at` back to NULL. In v1.57 this was narrowed: it does NOT reactivate a grace-state organization. For that, subscribe a tie… |
No output schema declared.
No examples provided.
admin_set_lease_perpetual ~286
Toggle an organization's `lease_perpetual` escape hatch (v1.57+). When `lease_perpetual: true`, the organization never advances past `active` regardless of lease expiry; every project in the organization inherits the pinned state. Enabling on a grace-state organization (past_due / frozen / dormant) reactivates inline and returns `reactivated: true`. Platform-admin only — uses the configured allowance wallet for admin auth. Replaces the v1.56 `pin_project` (gateway endpoint /projects/v1/admin/:id/pin was removed in v1.57). Calls POST /orgs/v1/admin/:org_id/lease-perpetual.
| Name | Type | Req | Description |
|---|---|---|---|
| lease_perpetual | boolean | yes | true → pin every project in the organization (organization never advances past 'active' regardless of lease expiry). false → resume normal lifecycle advancement. Enabling on a grace-state organizatio… |
| org_id | string | yes | The organization ID to toggle. Format: UUID. Platform-admin only — uses the configured allowance wallet for admin auth; project owners with a non-admin SIWX wallet will receive 403 admin_required. |
No output schema declared.
No examples provided.
ai_moderate ~56
Run content moderation on text. Returns flagged status and category scores. Free for all projects, requires service key.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | The project ID |
| text | string | yes | Text content to check for moderation |
No output schema declared.
No examples provided.
ai_translate ~136
Translate text to a target language. Requires service key and active AI Translation add-on. Supports optional source language and context hint.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Context hint for tone/register (max 200 chars, e.g. 'formal business email') |
| from | string | – | Source language (ISO 639-1 code). Auto-detected if omitted |
| project_id | string | yes | The project ID |
| text | string | yes | Text to translate (max 10,000 characters) |
| to | string | yes | Target language (ISO 639-1 code, e.g. 'es', 'ja', 'fr') |
No output schema declared.
No examples provided.
ai_usage ~38
Get AI translation usage for the current billing period — used words, quota, and remaining balance.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | The project ID |
No output schema declared.
No examples provided.
allowance_create ~42
Create a new local agent allowance (Base Sepolia testnet). Generates a private key and derives the Ethereum address. Saved to ~/.config/run402/allowance.json.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
allowance_export ~69
Export the local agent allowance address. Safe to share publicly. This is also the MAINNET on-ramp: to pay with real USDC on Base mainnet, send USDC to this address — `request_faucet` only funds Base Sepolia testnet, which cannot settle a real payment.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
allowance_status ~22
Check local agent allowance status — address, network, and funding status.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
app_up ~291
Plan or run the canonical app-aware `run402 up` workflow from a local path or repo URL. Delegates to the SDK and returns the shared app-up result envelope with graph steps, resources, diagnostics, and next_actions.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_prune | boolean | – | Approve destructive managed-resource prune steps. |
| allow_shell_build | boolean | – | Approve shell-string build commands after review. |
| build_mode | string | – | Override app build mode. |
| dir | string | – | Workspace directory to inspect when source is omitted. |
| dry_run | boolean | – | Plan only. No gateway mutation, build execution, release commit, local link write, or prune. |
| idempotency_key | string | – | Root idempotency key for resumable app-up graph mutations. |
| manifest | string | – | Explicit manifest path. Defaults to run402.json, then advanced release-only manifests. |
| max_spend_usd | number | – | Maximum spend app_up may approve for readiness steps. |
| name | string | – | Project/app instance name, for example kysigned2. |
| project_id | string | – | Existing project id to install into. |
| source | string | – | Local app directory or public Git repository URL. Defaults to the current directory. |
| tier | string | – | Bootstrap tier if account readiness is needed. |
| yes | boolean | – | Approve non-interactive prerequisite, spend, and local-write prompts. |
No output schema declared.
No examples provided.
apply_expose ~188
Apply a declarative authorization manifest to a project (POST /projects/v1/admin/:id/expose). The manifest describes the full authorization surface: tables (with policy, owner_column, force_owner_on_insert, i_understand_this_is_unrestricted, custom_sql), views (with base, select, filter), and rpcs (with signature, grant_to). Convergent: applying the same manifest twice is a no-op; items dropped between applies have their policies/grants/triggers/views revoked. Tables are dark by default — any table not declared with expose:true is unreachable via anon/authenticated.
| Name | Type | Req | Description |
|---|---|---|---|
| manifest | object | yes | Full authorization manifest. Convergent: applying twice is a no-op; items removed between applies are dropped. Tables are dark by default — any table not listed with expose:true is unreachable via an… |
| project_id | string | yes | The project ID |
No output schema declared.
No examples provided.
assets_get ~87
Download a blob to a local file path. Writes bytes directly to disk (no context-window bloat). Returns size + SHA-256 header (if the blob has one stored).
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Blob key to download |
| output_path | string | yes | Local filesystem path to write the bytes to. Parent directories will be created. |
| project_id | string | yes | Project ID |
No output schema declared.
No examples provided.
assets_ls ~184
List blobs in a project with optional prefix filter over a flat key namespace. Supports pagination via cursor.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | Pagination cursor from a previous response's next_cursor. v1.50: cursor is sort-pinned — reuse with a different `sort` returns 400 INVALID_CURSOR_FOR_SORT. |
| filter | object | – | v1.50: media-picker filter. Unknown keys are rejected with INVALID_FILTER_KEY before any HTTP call. |
| limit | integer | – | Max results (default 100, max 1000) |
| prefix | string | – | Filter: only return blobs whose key starts with this prefix |
| project_id | string | yes | Project ID |
| sort | string | – | v1.50: result ordering. Default 'key:asc' (legacy bare-key cursor). 'createdAt:*' variants use a base64url JSON cursor. |
No output schema declared.
No examples provided.
assets_put ~437
Upload a blob (file or inline content) to project storage via direct-to-S3. Accepts local_path (any size up to 5 TiB) or content (≤ 1 MB inline). Public blobs get a CDN URL; private blobs require authenticated reads. Use `immutable: true` to produce a content-addressed URL that never needs cache invalidation. For image uploads (jpeg/png/webp/heic/heif), the gateway also returns width_px/height_px/blurhash/display_url and a `variants` map (thumb 320w, medium 800w, large 1920w WebP — plus display_jpeg for HEIC sources) so apps can render responsive thumbnails without re-encoding client-side. See the SDK docs for the full AssetRef shape.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | – | Inline content to upload (UTF-8 string). For small blobs ≤ 1 MB. Mutually exclusive with `local_path`. |
| content_type | string | – | MIME type (auto-detected from file extension if omitted). |
| exif_policy | string | – | v1.50: EXIF retention policy for image uploads. Default 'keep'. 'strip' discards EXIF from the stored bytes and the image_exif response field. |
| immutable | boolean | – | When true, the returned URL includes a content-hash suffix so overwrites produce distinct URLs. CLI auto-computes sha256. |
| key | string | yes | Destination key (path in the project's blob namespace). No leading slash. Example: 'images/logo.png' or 'circuits/v1.zkey'. |
| local_path | string | – | Path to a local file to upload. Mutually exclusive with `content`. |
| metadata | object | – | v1.50: caller-provided flat metadata stored alongside the asset. Object with string / number / boolean / string[] leaves; ≤4 KB serialized. Nested objects rejected with INVALID_ASSET_METADATA (HTTP 4… |
| project_id | string | yes | Project ID |
| visibility | string | – | Default: public. Public blobs get a CDN URL; private blobs require authenticated reads. |
No output schema declared.
No examples provided.
assets_rm ~42
Delete a blob from project storage and decrement the project's storage_bytes.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Blob key to delete |
| project_id | string | yes | Project ID |
No output schema declared.
No examples provided.
assets_sign ~97
Generate a time-boxed S3 presigned GET URL for a blob. Use this to share a private blob externally without exposing your apikey. Default TTL 1 hour, max 7 days.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Blob key to sign a GET URL for |
| project_id | string | yes | Project ID |
| ttl_seconds | integer | – | URL lifetime in seconds (60 – 604 800, default 3600) |
No output schema declared.
No examples provided.
auth_settings ~168
Update project auth settings: allow_password_set, preferred_sign_in_method, public_signup, and require_passkey_for_project_admin. Requires service_key.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_password_set | boolean | – | Allow passwordless users (magic link / OAuth) to set a password. Default: false. |
| allowed_email_domains | array | – | Restrict hosted Google sign-in to these email domains, enforced at token issuance. [] or omitted = unrestricted; pass [] to clear. Normalized + domain-validated server-side. |
| preferred_sign_in_method | – | – | Project UI hint for the preferred sign-in method. |
| project_id | string | yes | The project ID |
| public_signup | string | – | Public signup policy. |
| require_passkey_for_project_admin | boolean | – | Require eligible passkey login for project_admin sessions. |
No output schema declared.
No examples provided.
billing_history ~78
View billing ledger history for the agent's allowance wallet. The wallet is resolved to its organization over SIWX (signed automatically); a wallet not linked to yours requires an admin key.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Max entries to return (default: 20) |
| wallet | string | yes | Wallet address (0x...) to get billing history for |
No output schema declared.
No examples provided.
browse_apps ~44
Browse public apps available for forking. Optionally filter by tags.
| Name | Type | Req | Description |
|---|---|---|---|
| tags | array | – | Optional tags to filter by (e.g. ['auth', 'rls']) |
No output schema declared.
No examples provided.
cancel_function_run ~50
Cancel a scheduled/queued durable function run when it has not completed yet.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | The project ID |
| run_id | string | yes | Function run id, fnrun_... |
No output schema declared.
No examples provided.
cancel_project_transfer ~149
Cancel a pending project transfer of any kind (v1.93+). You must be authorized for the row's kind (a wallet signing party, an owner/admin of the offering org, or the addressed-email principal). Already-accepted/cancelled/expired transfers return 409 TRANSFER_ALREADY_PROCESSED. Calls POST /agent/v1/transfers/:transfer_id/cancel.
| Name | Type | Req | Description |
|---|---|---|---|
| reason | string | – | Optional free-text cancellation reason recorded on the audit row. |
| transfer_id | string | yes | Transfer id to cancel. You must be authorized for the row's kind (a wallet signing party, or an owner/admin of the offering org / the addressed-email principal). Kind-agnostic. |
No output schema declared.
No examples provided.
check_balance ~70
Check the organization balance for the agent's allowance wallet — available and held funds. The wallet is resolved to its organization over SIWX (signed automatically); reading a wallet that is not linked to yours requires an admin key.
| Name | Type | Req | Description |
|---|---|---|---|
| wallet | string | yes | Wallet address (0x...) to check billing balance for |
No output schema declared.
No examples provided.
ci_create_binding ~317
Create a GitHub Actions CI/OIDC deploy binding by sending a locally signed delegation to the SDK. This MCP wrapper does not sign or broaden authority; the signed delegation defines the repository/branch or environment, allowed events/actions, and optional route_scopes. Without route_scopes, CI cannot deploy route declarations.
| Name | Type | Req | Description |
|---|---|---|---|
| allowed_actions | array | yes | Allowed CI actions. V1 supports only deploy. |
| allowed_events | array | yes | Allowed GitHub event names, typically push and workflow_dispatch. |
| expires_at | string|null | – | Optional ISO timestamp when this binding expires. |
| github_repository_id | string|null | – | Numeric GitHub repository id to pin the binding to, or null if absent. |
| nonce | string | yes | Lowercase hex nonce included in the signed delegation. |
| project_id | string | yes | Project ID the CI binding may deploy to. |
| provider | string | – | CI provider. V1 supports only github-actions; omitted defaults to github-actions. |
| route_scopes | array | – | Optional route delegation scopes, normalized by the SDK. Use exact paths like /admin or final wildcard prefixes like /api/*. Omit or pass [] for no CI route authority. |
| signed_delegation | string | yes | Base64 SIGN-IN-WITH-X delegation signed locally by the allowance wallet. This MCP tool does not sign; it only sends the signed delegation to the SDK. |
| subject_match | string | yes | GitHub Actions OIDC subject match, e.g. repo:owner/repo:ref:refs/heads/main. |
No output schema declared.
No examples provided.
ci_get_binding ~56
Get one CI/OIDC deploy binding by id, including its subject, allowed events/actions, repository id, revocation state, and route_scopes.
| Name | Type | Req | Description |
|---|---|---|---|
| binding_id | string | yes | CI binding id, e.g. cib_... |
No output schema declared.
No examples provided.
ci_list_bindings ~58
List CI/OIDC deploy bindings for a project, including route_scopes when delegated. Use this to inspect which GitHub Actions subjects can deploy before editing bindings.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | Project ID whose CI bindings should be listed. |
No output schema declared.
No examples provided.
ci_revoke_binding ~59
Revoke one CI/OIDC deploy binding. Revocation stops future CI gateway requests, but does not undo already deployed releases or rotate secrets.
| Name | Type | Req | Description |
|---|---|---|---|
| binding_id | string | yes | CI binding id to revoke. Revocation stops future CI requests only. |
No output schema declared.
No examples provided.
claim_project_transfer ~224
Claim an incoming EMAIL transfer into an org (v1.93+) — the email analog of `accept_project_transfer`. The transfer's addressed email must match your verified email. Provide `org_id` to claim into an org you own/admin, or omit to create a new org. Atomically flips ownership and returns the new owner's project keys (persisted to the local keystore, symmetric with accept) so you can operate the project immediately. Calls POST /agent/v1/transfers/:transfer_id/claim.
| Name | Type | Req | Description |
|---|---|---|---|
| accept_retained_collaborator | boolean | – | Accept the sender's v1.91 retained-`developer`-membership offer (see the preview's retain_collaborator). Omit (the default) for a full severance. |
| org_id | string | – | Organization to claim the project into (you must own/admin it). Omit to claim into a brand-new org. |
| transfer_id | string | yes | EMAIL transfer id to claim. The transfer's addressed email must match your verified email. The email analog of `accept_project_transfer`. |
No output schema declared.
No examples provided.
claim_subdomain ~134
Claim a custom subdomain (e.g. myapp.run402.com) and point it at an existing deployment. Free, requires service_key auth.
| Name | Type | Req | Description |
|---|---|---|---|
| deployment_id | string | yes | Deployment ID to point this subdomain at (e.g. 'dpl_1709337600000_a1b2c3') |
| name | string | yes | Custom subdomain name (e.g. 'myapp' → myapp.run402.com). 3-63 chars, lowercase alphanumeric + hyphens. |
| project_id | string | – | Optional project ID for ownership tracking. Uses stored service_key for auth. |
No output schema declared.
No examples provided.
contract_call ~199
Submit a smart-contract write call from a KMS signer. The gateway encodes via viem, signs the digest via AWS KMS, and broadcasts. Idempotent on optional idempotency_key. Cost: chain gas at-cost + $0.000005 KMS sign fee per call.
| Name | Type | Req | Description |
|---|---|---|---|
| abi_fragment | array | yes | ABI fragment containing the function definition |
| args | array | yes | Function arguments (must match ABI) |
| chain | string | yes | EVM chain |
| contract_address | string | yes | 0x-prefixed contract address |
| function_name | string | yes | Function name to invoke |
| idempotency_key | string | – | Optional idempotency key — same key returns same call_id without re-broadcasting |
| project_id | string | yes | The project ID |
| signer_id | string | yes | The KMS signer ID |
| value | string | – | Optional native-token value in wei (decimal string) |
No output schema declared.
No examples provided.
contract_deploy ~275
Deploy a smart contract from a KMS signer (signs a contract-creation tx with `to: null + data: bytecode`). The `bytecode` is full creation calldata — creation bytecode + ABI-encoded constructor args, concatenated client-side (run402 does NOT compile Solidity). Returns the deterministic CREATE address synchronously in `contract_address` — known before confirmation, no polling needed to know where the contract lives. Same pricing as `contract_call`: chain gas at-cost + $0.000005 KMS sign fee.
| Name | Type | Req | Description |
|---|---|---|---|
| bytecode | string | yes | Full creation calldata as 0x-prefixed hex (creation bytecode + ABI-encoded constructor args, concatenated client-side). Non-empty, even-length, ≤ 128 KB. run402 does NOT compile Solidity. |
| chain | string | yes | EVM chain (must match the signer's chain) |
| idempotency_key | string | – | Optional idempotency key — same key + same bytecode returns same call_id without re-broadcasting |
| project_id | string | yes | The project ID |
| signer_id | string | yes | The KMS signer ID (cwlt_...) that will sign + own the new contract |
| value | string | – | Optional native-token value in wei to attach to the deploy (decimal string) |
No output schema declared.
No examples provided.
contract_read ~92
Read-only smart-contract call (view/pure functions). No signing, no gas, no billing — pure RPC convenience.
| Name | Type | Req | Description |
|---|---|---|---|
| abi_fragment | array | yes | ABI fragment containing the view/pure function |
| args | array | yes | Function arguments |
| chain | string | yes | EVM chain |
| contract_address | string | yes | 0x-prefixed contract address |
| function_name | string | yes | Function name |
No output schema declared.
No examples provided.
create_auth_user ~133
Create or update a project auth user with the service key. Can set project_admin and optionally send a trusted invite.
| Name | Type | Req | Description |
|---|---|---|---|
| client_state | – | – | Optional opaque state preserved through trusted invite verification |
| string | yes | Email address of the auth user to create or update | |
| is_admin | boolean | – | Set project_admin status for this user |
| project_id | string | yes | The project ID |
| redirect_url | string | – | Required when send_invite=true. Must be an allowed project auth redirect origin. |
| send_invite | boolean | – | Send a trusted invite magic link after creating/updating the user |
No output schema declared.
No examples provided.
create_checkout ~125
Create a Stripe checkout URL for an organization. Products: balance_topup, tier, email_pack.
| Name | Type | Req | Description |
|---|---|---|---|
| amount_usd_micros | number | – | Required for product=balance_topup; amount in micro-USD (e.g. 5000000 = $5.00) |
| cancel_url | string | – | Optional checkout cancel redirect URL |
| org_id | string | yes | Organization ID to bill |
| product | string | yes | Checkout product |
| success_url | string | – | Optional checkout success redirect URL |
| tier | string | – | Required for product=tier |
No output schema declared.
No examples provided.
create_email_organization ~59
Create an email-based organization (Stripe-only, no wallet required). Sends a verification email. Idempotent — duplicate emails return the existing organization.
| Name | Type | Req | Description |
|---|---|---|---|
| string | yes | Email address to create an organization for (Stripe-only, no wallet) |
No output schema declared.
No examples provided.
create_function_run ~305
Create a durable function run with a required idempotency key. Supports immediate, delayed, or run_at scheduling, expiry, retry policy, and optional wait. Use this instead of ad hoc cron/polling when work must survive retries or be redriven.
| Name | Type | Req | Description |
|---|---|---|---|
| delay | string | – | Delay before first attempt, such as `10m`, `1h`, or `3d`. Mutually exclusive with run_at. |
| delay_seconds | number | – | Delay before first attempt in seconds. Mutually exclusive with delay and run_at. |
| event_type | string | yes | Application event type delivered to the function run handler |
| expires_after | string | – | Relative expiry duration, such as `1d`. |
| expires_at | string | – | Absolute ISO-8601 expiry time. |
| idempotency_key | string | yes | Required idempotency key. Reuse it when retrying the same logical work item. |
| name | string | yes | Function name to run |
| payload | object | – | JSON object payload delivered to the handler |
| poll_interval_ms | integer | – | Polling interval in milliseconds. |
| project_id | string | yes | The project ID |
| retry | object | – | – |
| run_at | string | – | Absolute ISO-8601 first-attempt time. Mutually exclusive with delay/delay_seconds. |
| timeout_ms | integer | – | Maximum wait time in milliseconds. |
| wait | boolean | – | Wait until the run becomes terminal before returning. |
No output schema declared.
No examples provided.
create_mailbox ~139
Create a project-scoped mailbox local part. The managed address is <slug>@<project-mail-host>.mail.run402.com; matching slugs in other projects are allowed. Returns mailbox_settings and next_actions when the gateway provides default-role repair guidance. Not idempotent: same-project slug conflicts/cooldowns/limit errors are surfaced.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | The project ID to create a mailbox for |
| slug | string | yes | Project-scoped mailbox local part (3-63 chars, lowercase alphanumeric + hyphens, no consecutive hyphens). Creates <slug>@<project-mail-host>.mail.run402.com |
No output schema declared.
No examples provided.
create_notification_rule ~257
Create a Telegram routing rule: one match (project_id / source / event_types / classes, all ANDed, each optional — omitted = wildcard) routes to one Telegram binding. Requires operator_passkey assurance. An unusable or foreign telegram_binding_id returns the same 404 as a nonexistent one.
| Name | Type | Req | Description |
|---|---|---|---|
| classes | array | – | Only match these notification classes (matches ANY listed value), e.g. 'lifecycle', 'app'. Omit to match any class. An empty array matches NOTHING (not a wildcard). |
| event_types | array | – | Only match these exact event_type names (matches ANY listed value). Omit to match any event_type. An empty array matches NOTHING (not a wildcard). |
| project_id | string | – | Only match events for this project. Omit to match every project (wildcard). |
| source | string | – | Only match events from this source: 'app' (a deployed function's events.emit(...) calls) or 'platform' (deploys, lifecycle, verification, ...). Omit to match both. |
| telegram_binding_id | string | yes | The Telegram binding (chat) this rule routes matching events to. Must be an active binding owned by this operator — see list_notification_channels. |
No output schema declared.
No examples provided.
create_org ~140
Create an empty organization on the prototype tier (POST /orgs/v1); you become its owner. Accepts only an optional `display_name` (no tier input); the response reports `tier`, `lease_started_at`, and `lease_expires_at`. Step-up gated; the soft per-owner free-org cap may return `FREE_ORG_OWNER_LIMIT_EXCEEDED`.
| Name | Type | Req | Description |
|---|---|---|---|
| display_name | string | – | Optional free-text label (e.g. `Kychee`). Non-unique, not an id. Omit for an unlabeled org. There is no tier input at create; the response reports the created org's prototype tier/lease state. |
No output schema declared.
No examples provided.
create_project_branch ~134
Create a contained branch project from a fresh or existing snapshot. Email is sandboxed/off and cron is off unless explicitly enabled.
| Name | Type | Req | Description |
|---|---|---|---|
| email_mode | string | – | Branch email containment. Default sandbox. |
| enable_cron | boolean | – | Enable scheduled functions on the branch. Default false. |
| from_snapshot_id | string | – | Existing ready snapshot to branch from. Omit to capture a fresh contained snapshot first. |
| name | string | – | Human-readable branch project name. |
| project_id | string | yes | Parent project ID. |
| ttl_days | integer | – | Branch TTL in days. Default 7, max 30. |
No output schema declared.
No examples provided.
create_project_grant ~174
Issue a per-project capability grant to a wallet (for agent/CI principals that aren't broad org members). Params: `project_id`, `wallet`, `capability` (e.g. `deploy`, `functions:write`), optional `policy` / `expires_at`. Requires you to be an owner of the project's org.
| Name | Type | Req | Description |
|---|---|---|---|
| capability | string | yes | Capability to grant, e.g. `deploy` or `functions:write`. |
| expires_at | string | – | Optional ISO-8601 expiry. Omit for a non-expiring grant. |
| policy | object | – | Optional capability-scoping policy object (gateway-interpreted). |
| project_id | string | yes | Project id to grant access to. |
| wallet | string | yes | EVM address (or named wallet) the grant is issued to. |
No output schema declared.
No examples provided.
create_project_snapshot ~39
Capture a manual project data snapshot. Snapshots are internal restore points, not downloadable archives.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | Project ID to snapshot. |
No output schema declared.
No examples provided.
delete_function ~38
Delete a deployed function from a project.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | Function name to delete |
| project_id | string | yes | The project ID |
No output schema declared.
No examples provided.
delete_mailbox ~126
Delete the project's mailbox (irreversible — drops all messages and webhook subscriptions). Requires confirm=true. If mailbox_id is omitted, resolves the project's mailbox.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | yes | Must be true. Destructive: deleting a mailbox drops all messages and webhook subscriptions and is irreversible. |
| mailbox_id | string | – | Mailbox to delete — slug or id (mbx_...). If omitted, deletes the project's only mailbox; on a project with more than one mailbox, omitting it returns an ambiguity error naming the slugs. |
| project_id | string | yes | The project ID |
No output schema declared.
No examples provided.
delete_mailbox_webhook ~74
Delete a webhook. Idempotent — succeeds even if already deleted.
| Name | Type | Req | Description |
|---|---|---|---|
| mailbox | string | – | Target mailbox by slug or id; omit only when the project has exactly one mailbox. |
| project_id | string | yes | The project ID |
| webhook_id | string | yes | The webhook ID (whk_...) |
No output schema declared.
No examples provided.
delete_notification_rule ~35
Delete a Telegram routing rule. Requires operator_passkey assurance.
| Name | Type | Req | Description |
|---|---|---|---|
| rule_id | string | yes | The routing rule id to delete. |
No output schema declared.
No examples provided.
delete_passkey ~56
Delete one authenticated-user passkey by id.
| Name | Type | Req | Description |
|---|---|---|---|
| access_token | string | yes | Authenticated user's access_token |
| passkey_id | string | yes | Passkey ID to delete |
| project_id | string | yes | The project ID |
No output schema declared.
No examples provided.
delete_project ~124
Immediately and irreversibly delete a project: the gateway runs the full destructive cascade (drop tenant schema, delete Lambda functions, release subdomains, tombstone mailbox, remove sender domain, wipe secrets and app versions) and sets status=purged. This tool also removes the project from the local key store. Distinct from the automatic lease-expiry grace window — this action is the explicit purge and cannot be undone. To recover from a missed renewal use `set_tier` instead.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | The project ID to delete (irreversible cascade purge) |
No output schema declared.
No examples provided.
delete_project_branch ~44
Delete a contained branch project and purge its resources.
| Name | Type | Req | Description |
|---|---|---|---|
| branch_project_id | string | yes | Branch project ID to delete. |
| project_id | string | yes | Parent project ID. |
No output schema declared.
No examples provided.
What is the Run402 MCP server?
Run402 is an MCP server listed in the public MCP registry as com.run402/mcp. x402 pay-per-call infra for agents: $0.03 image generation, Postgres, auth, storage, functions. This page covers its npm package (run402-mcp).
Is the Run402 MCP server safe to use?
Run402 scores 92 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Run402 MCP server expose?
Run402 exposes 198 tools: provision_postgres_project, run_sql, rest_query, apply_expose, validate_manifest, and 193 more. Their descriptions and schemas cost roughly 22,855 tokens of context every time the server is loaded.
Is the Run402 MCP server still maintained?
Run402 is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Run402 MCP server under?
Run402 declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.