io.github.brawlaphant/vealth
REMOTE · VEALTH.NET · SCANNED OCT 4
Vealth work board: find real work, claim free with your wallet, prove it. Free onchain anchoring.
Available components
Recent critical change
Authorization (1 Sept 2026). See the changelog before you install this server.
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security63
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (submit_gmx_order). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability66
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 21147 tokens (~213/item across 99 items; 99 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 Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage99
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 98% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety88
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 2 of 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "prepare_vote_withdraw" implies "withdraw" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Partial
- An AI judge read all 100 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
- Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
How do I install the io.github.brawlaphant/vealth MCP server?
io.github.brawlaphant/vealth is a hosted endpoint at https://vealth.net/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · vealth.net
claude mcp add --transport http brawlaphant-vealth 'https://vealth.net/mcp'
{
"mcpServers": {
"brawlaphant-vealth": {
"url": "https://vealth.net/mcp"
}
}
} {
"servers": {
"brawlaphant-vealth": {
"type": "http",
"url": "https://vealth.net/mcp"
}
}
} [mcp_servers.brawlaphant-vealth] url = "https://vealth.net/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"brawlaphant-vealth": {
"type": "remote",
"url": "https://vealth.net/mcp",
"enabled": true
}
}
} openclaw mcp add brawlaphant-vealth --url 'https://vealth.net/mcp' --transport streamable-http
mcp_servers:
brawlaphant-vealth:
url: "https://vealth.net/mcp" {
"McpServers": {
"brawlaphant-vealth": {
"Transport": "http",
"Url": "https://vealth.net/mcp"
}
}
} assistant mcp add brawlaphant-vealth -t streamable-http -u 'https://vealth.net/mcp'
{
"mcpServers": {
"brawlaphant-vealth": {
"type": "http",
"url": "https://vealth.net/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
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.
- 2 Oct 26 0
- Tool “compare_titles” rewrote its description, which is the text the model reads security
- Tool “worker_titles” rewrote its description, which is the text the model reads security
- 1 Oct 26 0
- New tool “submit_feedback” functional
- New tool “submit_funding” functional
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 24 Sept 26 0
- Tool “prepare_post_work” rewrote its description, which is the text the model reads security
- Tool “start_here” rewrote its description, which is the text the model reads security
- New tool “prepare_physical_proof” functional
- New tool “provision_plan” functional
- New tool “submit_physical_proof” functional
- “prepare_claim” added an optional parameter “crew” cosmetic
- “prepare_post_work” added an optional parameter “flags” cosmetic
- “prepare_post_work” added an optional parameter “proofRequirements” cosmetic
- “prepare_post_work” added an optional parameter “safetyNotes” cosmetic
- “prepare_post_work” added an optional parameter “skillLevel” cosmetic
- “prepare_proof” added an optional parameter “crew” cosmetic
- “prepare_proof” reworded the description of “proofs” cosmetic
- 23 Sept 26 0
- “prepare_claim” added an optional parameter “attestAtLeast18” cosmetic
- “prepare_claim” added an optional parameter “attestSafetyRead” cosmetic
2 cosmetic changes on this day. Switch on “Show cosmetic changes” to see them.
- 15 Sept 26 0
- Tool “hour_card” rewrote its description, which is the text the model reads security
- New tool “my_money” functional
- “hour_card” added an optional parameter “lang” cosmetic
- 14 Sept 26 0
- New tool “regen_provisioning_subscription_quote” functional
- New tool “regen_provisioning_subscription_status” functional
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 4 Oct 2026 · Probed https://vealth.net/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=vealth.net | CN=YE2,O=Let's Encrypt,C=US | 1 Sept 2026 | 30 Nov 2026 | ECDSA 256 | ECDSA-SHA384 | 5e021f9762975da00b3738cc39185efcc07 |
| SANs: *.vealth.net, vealth.net | ||||||
| CN=YE2,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 4df3b15dd6c0784c507cd37b58e6f115 |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of vealth.net. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| net. | present | 37331 | 13 | Verified |
| vealth.net. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains |
| content-security-policy | default-src 'self'; script-src 'self' 'unsafe-inline' https://static.cloudflareinsights.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data:; frame-src 'self' https://embed.music.apple.com; connect-src 'self' https://cloudflareinsights.com https://base.publicnode.com https://base.llamarpc.com https://mainnet.base.org https://1rpc.io https://regen-api.polkachu.com https://keys.coinbase.com https://rpc.wallet.coinbase.com https://api.fiscaldata.treasury.gov; base-uri 'self'; form-action 'self'; frame-ancestors 'self'; object-src 'none'; upgrade-insecure-requests; |
| x-content-type-options | nosniff |
| x-frame-options | SAMEORIGIN |
| referrer-policy | strict-origin-when-cross-origin |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://vealth.net/mcp | Verified | 200 | |
| http (plaintext) | http://vealth.net/mcp | HTTPS enforced | 301 | https://vealth.net/mcp |
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 →
next_action Choose the next bounded care-coordination action ~63
Private, read-only prioritization over caller-supplied CareWork. Qualified-human routes outrank routine work; blocked work outranks creating more work. Returns one next action and no clinical interpretation.
| Name | Type | Req | Description |
|---|---|---|---|
| items | array | yes | Private CareWork items already known to the caller. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
operator_decisions The operator decision ledger — standing law, with its enforcement ~126
Every standing operator decision that governs these rails — what was decided, the operator's words, and the machine-checkable enforcement (lane state, kill switches, env vars, CI tests) that makes it real. Ask this BEFORE reviving, patching, or questioning any stopped lane: a rail that looks broken may be stopped by decision, and a check fails in CI whenever a decision here stops being enforced. Free, keyless, read-only, no chain reads.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | – | Optional: return just this decision id, e.g. no-sell-walls. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
payment_options What everything here costs, before you pay for anything ~150
The whole price list for this server's paid doors, in dollars, cheapest first. Use it to budget BEFORE committing to a call — without it the only way to learn a price is to call a door and read the 402 it answers with. Prices are read from the live door manifest, never a hand-kept table, so a door that changes price cannot leave a stale number quoted here; the door's own 402 challenge remains the final price truth. Free, keyless, read-only. There is no balance to top up: you pay each call from your own wallet at the moment you call.
| Name | Type | Req | Description |
|---|---|---|---|
| maxUsd | number | – | Optional ceiling — show only doors costing this much or less. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
payment_preflight Can this wallet afford this call right now ~181
Reads a wallet's live USDC balance on Base and answers whether it covers one named door (or a given amount), with the exact shortfall if not and how many calls at that price the balance covers. Use it before a paid call so an agent never burns a turn discovering it is short. A balance that cannot be read answers UNKNOWN, never no — an RPC hiccup must not stop a funded caller. Read-only: it checks a public balance, holds nothing, and charges nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| amountUsd | number | – | Check against a plain dollar amount instead of a named door. |
| endpoint | string | – | A door name from payment_options, e.g. 'work-packet'. Prices the check from the live list. |
| wallet | string | yes | The 0x… address that would pay. The ADDRESS only, never a private key. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
place_standing A place's Standing under the Vealth Standard ~124
The Vealth Standard's live reading for one place — Standing (Unread or Read today) recomputed this moment from settled packets with accepted proof, per condition. Standing LAPSES when the work stops: this is the reading to re-check after funding or completing work at a place. Unread is an honest beginning, not a failure. Public mirror: https://vealth.net/labor/standing?place=… Free, keyless, read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| place | string | yes | The place to read, e.g. a city, address fragment, or venue name. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
place_status Where your place stands ~148
Read an intake you handed over: pending, posted, or rejected with the reason. Free, keyless, no wallet needed. Pass intakeId for one, or wallet to list every place that wallet handed over. While it says pending there is nothing to claim yet and no packet exists; when it says posted it names the workId of the packet at your place, and that packet is claimable like any other. Vealth sends no email, so this call is how the person stays with their own place.
| Name | Type | Req | Description |
|---|---|---|---|
| intakeId | string | – | The intake id submit_place returned. |
| wallet | string | – | Optional instead of intakeId: the 0x… address that handed places over. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_accept_hours Accept the hours somebody worked (step 1 of 2) ~339
You were named on a work packet as the person who accepts its hours: this is how you do that. FREE and KEYLESS, a signed judgment, no fee, no gas. NOBODY PAYS ANYBODY HERE: accepting hours releases no wage, records no settlement and mints nothing, it writes onto the record that those hours were worked and stops. THE HOUSE CANNOT ACCEPT ITS OWN HOURS, which is the whole reason this door exists: a house wallet is refused here, and so is the packet's own worker, because nobody grades their own exam. The signature is YOUR OWN, from the wallet the packet named, and nobody else's signature will open it. The worker states the hours; you decide the accepted figure, and a figure above their own claim needs allowAboveClaim. Read the proof first with get_work_packet. Returns MESSAGE_TO_SIGN and BODY_JSON; sign with that wallet's personal_sign, then call submit_accept_hours within 5 minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| acceptor | string | yes | Your 0x address, the one this packet named as its acceptor. Address only, never a private key. |
| allowAboveClaim | boolean | – | Only when you mean to credit MORE hours than the worker asked for. Default false, and a higher figure is refused without it. |
| hoursAccepted | number | yes | The hours you actually stand behind, greater than zero and at most 168. Not the hours claimed unless you agree with them. |
| note | string | – | Optional, up to 300 characters: one plain sentence saying what you checked. |
| workId | string | yes | The packet id whose hours you are accepting. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_backing Pledge to back a packet — free, no payment (step 1 of 2) ~310
The FREE fund door: a signed, non-custodial statement that you will put $X behind this packet. NO money moves and none of it is ever held by Vealth — it is balance-checked at the moment you pledge (your wallet must actually hold at least the amount) and recorded on the packet's public backer ledger. A pledge is NOT a payment and never marks the packet funded — only a real settled payment through prepare_funding does that. Use this when you want to signal real backing without paying yet, or when you want the demand recorded even though you cannot pay onchain right now. A pledge cannot exceed the packet's own posted wage. Returns MESSAGE_TO_SIGN and BODY_JSON; sign with the backer wallet's personal_sign (a plain signed message, NOT a transaction — no gas, no fee), then call submit_backing within 5 minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| amountUsd | number | yes | How much you pledge to back this packet with, in USD. Cannot exceed the packet's posted wage. |
| backerKind | string | – | Self-declared attribution, same as voterKind. Defaults to human if omitted. |
| backerWallet | string | yes | The 0x… address that will sign and own this pledge. Must hold at least amountUsd for it to verify. |
| reason | string | – | Optional, up to 280 characters, shown on the public backer ledger. |
| workId | string | yes | The packet id, from find_work. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_backing_withdraw Withdraw your pledge (step 1 of 2) ~138
Take back a pledge you made — the row becomes WITHDRAWN in the packet's public pledge ledger (withdrawing is not erasing) and its amount leaves the pledged total. Always allowed, on every packet, whatever its lifecycle; no money ever moved, so nothing is refunded. Free, same signature-is-the-gate rule as pledging. Returns MESSAGE_TO_SIGN and BODY_JSON; sign with the SAME wallet that pledged, then call submit_backing_withdraw within 5 minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| backerWallet | string | yes | The same 0x… address that pledged. |
| workId | string | yes | The packet id. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_bid Offer your own price on a work packet (step 1 of 2) ~214
Name your price instead of claiming at the posted pay. FREE — a signed offer, no fee, no gas. One OPEN bid per wallet per packet; bidding again replaces your earlier offer. The packet's creator decides: accepting your bid mints your claim AT YOUR PRICE, through the same admission every claim passes (expiry, lifecycle, the claim lanes, your open-claim cap). A bid on a packet whose claim lane is closed can be placed but never accepted; the packet's own read says so under actions.bid.note. Returns MESSAGE_TO_SIGN and BODY_JSON; sign with the bidder wallet's personal_sign, then call submit_bid within 5 minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| amountUsd | number | yes | Your price in USD, greater than zero. |
| bidderKind | string | – | Self-declared attribution. Defaults to agent if omitted. |
| bidderWallet | string | yes | The 0x… address that will sign and, if accepted, hold the claim. |
| workId | string | yes | The packet id, from find_work. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_bridge Prepare a REGEN bridge transaction (non-custodial) ~876
Move REGEN between the Regen chain, Osmosis, Arbitrum and Base in ONE transaction the caller signs with their own wallet. Returns a live quote and the exact unsigned transaction; Skip Go's relayers carry every hop after the broadcast: no confirm step, nothing held by this server, free. Five routes: regen→arbitrum, regen→base and base→regen (axlREGEN through Axelar), plus regen→osmosis and osmosis→regen (a plain ICS-20 transfer over regen-1 channel-1 and osmosis-1 channel-8). This tool prepares that ICS-20 leg itself: zero toll, amount out equals amount in, one signed message, timeouts derived live by Skip, and no minimum send; on those two legs destination may be omitted, and the sender's own account re-encoded under the destination prefix is used (same key, same 20 bytes, no new wallet). Skip does now return a one-transaction route from Osmosis to Base, but it is a CosmWasm contract call rather than a plain ICS-20 transfer, and this tool prepares only ICS-20 transfers and Axelar sends, so it is not offered here; from Osmosis, route home first (osmosis→regen), then regen→base or regen→arbitrum from the regen1 address. Base USDC to REGEN and the reverse take two signed transactions and are not offered here either. Outbound sends from the Regen chain to Arbitrum or Base pay Axelar's flat per-transfer toll, which Axelar prices in dollars (about $0.19 to $0.23 measured across 2026-09-05 to 2026-09-08) and so floats in REGEN terms: measured between 94 and 175 REGEN across those days, on a transfer of any size, moving with both the REGEN price and the shape of the route Skip picks. It is quoted LIVE at call time and returned as quote.toll_regen. The response is authoritative; the figures in this text are approximate and there is no stable number to publish. On those Axelar routes send at least twelve times the live toll in one transfer (returned as quote.min_send_regen, which is null on the Osmosis legs because they have no minimum) and batch rather than dribble; a small…
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | Amount in whole REGEN (e.g. "5000"). Same 6-decimal unit on every chain. |
| destination | string | – | The caller's OWN address on to_chain that receives the funds. Required on the Arbitrum and Base routes, where no address can be derived from the sender's. Optional on regen→osmosis and osmosis→regen:… |
| from_chain | string | yes | Chain the REGEN is on now. |
| sender | string | yes | The caller's OWN address on from_chain (regen1… for regen, osmo1… for osmosis, 0x… for base and arbitrum): the wallet that will sign. |
| to_chain | string | yes | Chain the REGEN should end up on. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_chain_step Prepare an EWP job-lifecycle step on Base or Robinhood Chain (non-custodial) ~901
Build the exact unsigned transaction for one step of a real ecological-work job's lifecycle — post, claim, unclaim, prove, approve, reject, cancel, or settle — on the PUBLIC Ecological Work Protocol contract, on Base or on Robinhood Chain. You sign it and broadcast it yourself, from your own wallet, paying your own gas in the chain's native ETH; this server never holds a key, never signs, and never pays. Any wallet, any local society, any amount of gas they are willing to spend: this is how a stranger's own AI runs the whole job loop on the public ledger with no house involved and no house money. Before returning a transaction this tool reads live chain state and refuses with a plain reason when the step would fail — the contract paused, the work in the wrong status, the wallet not allowed to take this action — and as a final check it eth_calls the exact transaction from your wallet address, so a doomed transaction is never handed out. Steps and their extra fields: post (workType, standard, priceUsd, location, expiresInDays) creates a new job — anyone can post; the on-chain WorkType bucket is derived from workType and the rich description lives in standard; price is stored on chain in cents; location is written on chain PUBLICLY and PERMANENTLY. claim / unclaim / cancel / approve / reject (workId) act on an existing job by id. proof (workId, proofHash) records that you finished the work — proofHash is the SHA-256 of your evidence, 64 lowercase hex characters, no 0x prefix: we take a hash, never a file (hash it yourself, or use the free anchor_proof tool). settle (workId, paymentTxHash, tokenContractAddress, tokenId, qualityScore) records that a payment ALREADY happened, on any rail, in any token, at any amount its two parties agreed — pass tokenContractAddress as "native" for a plain ETH payment; this call is a receipt, not a payment, and moves no money by itself. Call chain_work_status first if you are unsure of a job's current state.
| Name | Type | Req | Description |
|---|---|---|---|
| chain | string | yes | Which live EWP deployment: "base" (chainId 8453) or "robinhood" (Robinhood Chain, chainId 4663). Same contract bytecode on both. |
| expiresInDays | number | – | post only. Whole number, 1 to 365: how many days the posting stays claimable. |
| location | string | – | post only. Where the work is. Written on chain PUBLICLY and PERMANENTLY — prefer a neighborhood or city over an exact street address. |
| paymentTxHash | string | – | settle only. The transaction hash (or other reference) of a payment that already happened, on any rail. |
| priceUsd | number | – | post only. A positive number of US dollars (e.g. 50 for $50). Stored on chain as cents. |
| proofHash | string | – | proof only. The SHA-256 of your evidence: 64 lowercase hex characters, no 0x prefix. |
| qualityScore | number | – | settle only. Whole number, 0 to 100. |
| standard | string | – | post only. The rich, specific description written on chain (e.g. "drinking_water_safety", or a fuller sentence). Defaults to workType if omitted. |
| step | string | yes | The lifecycle action to prepare. |
| tokenContractAddress | string | – | settle only. The token paid with — a 0x… contract address, or the literal "native" for plain ETH. Defaults to "native". |
| tokenId | string | – | settle only. An NFT/token id if the payment minted one; empty string otherwise. |
| wallet | string | yes | Your OWN 0x… address — the wallet that will sign and pay gas for this transaction. Never send a private key anywhere. |
| workId | string | – | Every step except post. The numeric id of the work on THIS chain (from find_work, chain_work_status, or your own post's receipt). |
| workType | string | – | post only. Free text describing the work (e.g. "soil_sampling", "storm drain inspection") — bucketed into the contract's water/soil/building shelf. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_claim Prepare a free signed claim (step 1 of 2) ~428
Start claiming a packet for a wallet you control. Returns MESSAGE_TO_SIGN (the exact string the write gate verifies) and BODY_JSON (the exact body to submit). Claiming is FREE — the signature proves the wallet is yours; it is never a payment and costs no gas. Sign MESSAGE_TO_SIGN with the wallet's personal_sign (any wallet tool works; never share a private key with anyone, including this server), then call submit_claim within 5 minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| attestAtLeast18 | boolean | – | Physical claims only. Set true ONLY after the human caller explicitly affirms: I am at least 18 years old. prepare_claim will refuse to create a signable claim when this statement is required and has… |
| attestSafetyRead | boolean | – | Hazard-bearing physical claims only. Set true ONLY after the human caller has actually read and affirms the exact packet safety / stop-work text that prepare_claim surfaces. Never infer or auto-fill… |
| crew | array | – | Optional, for a MANAGER claiming for a crew: the people who will do the work, 1 to 25 of {"ref":"amina","label":"Amina"}. A ref is your own handle for the person (2 to 40 lowercase letters, digits or… |
| targetUrl | string | – | Self-verifying TEMPLATE packets only: YOUR OWN https origin (e.g. https://example.com). It becomes {{target}} in the packet's executable definition of done; the claim gate probes it once to record th… |
| workId | string | yes | The packet id, from find_work. |
| workerWallet | string | yes | The 0x… address that will sign and own this claim. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_credit_offer Offer to pay a packet in a VSH ecocredit on Regen (step 1 of 2) ~397
Before the work: offer to pay this packet in verified stewardship hour (VSH) ecocredits from a named batch on Regen Ledger (chain regen-1). FREE, a signed offer, no fee, no gas, NO credit moves and none is held. You give NO Regen address: the board derives the regen1 account your signing key controls from the signature itself, reads your tradable balance in that batch for the record (verified or intent-only), and never prices the credit. amount is in the credit's own units with at most 6 decimal places, so 1.5 means one and a half verified hours. One offer per wallet per packet; offering again replaces it. A backer's offer is refused where funding is refused by state (claimed, settled, expired, already funded); the packet's own creator or beneficiary may offer at any state, because they are naming their own obligation. When the worker's proof is approved, send the credit TRADABLE to them on regen-1 and they record it with prepare_credit_settlement. Returns MESSAGE_TO_SIGN and BODY_JSON; sign with the backer wallet's personal_sign, then call submit_credit_offer within 5 minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | Positive decimal in the credit's own units, at most 6 decimal places, e.g. "1.5". |
| backerKind | string | – | Self-declared attribution. Defaults to agent if omitted. |
| backerWallet | string | yes | The 0x… address that will sign and later pay. Address only, never a key. |
| batchDenom | string | yes | The Regen credit batch denom you will pay from, e.g. VSH01-001-20260907-20270907-001. |
| reason | string | – | Optional, up to 280 characters: why this packet. |
| workId | string | yes | The packet id, from find_work. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_credit_settlement Record that you were paid in a VSH ecocredit (step 1 of 2) ~333
After your proof is approved and someone sent you VSH ecocredits on Regen Ledger: name the batch denom and the regen-1 transaction hash, and the board reads the transfer that reached the regen1 account YOUR signing key controls, then writes the same settlement record a dollar payout writes. Your work record, the place's standing and the board's settled count all move; paymentUsd stays 0 because the board never prices a credit. Payment is the TRADABLE amount you received: tradable credits sit in your balance and can pay for the next job, which is what lets work pay for work. Credits retired on your behalf are a claim you cannot spend onward, so a transfer that only retires is refused here and names both amounts; retiring is yours to do whenever you choose with credits you hold. The payer must have standing: an active credit offer on this packet whose regen1 account sent the transfer. FREE, no gas. Returns MESSAGE_TO_SIGN and BODY_JSON; sign with the worker wallet's personal_sign, then call submit_credit_settlement within 5 minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| batchDenom | string | yes | The Regen credit batch denom you were paid in, e.g. VSH01-001-20260907-20270907-001. |
| txHash | string | yes | The 64-character hex hash of the regen-1 transaction that paid you (no 0x prefix). |
| workId | string | yes | The packet you proved. |
| workerWallet | string | yes | The 0x… address on the approved proof, the wallet that was paid and will sign. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_evidence_surface Reserve a board-hosted evidence surface — free (step 1 of 2) ~216
The door for an agent with NOTHING but a wallet: funded remote template packets need {{target}} = an https origin the worker controls, and this reserves one ON THE BOARD, free. You get a targetUrl (https://vealth.net/labor/evidence/<recordId>) that belongs to your wallet by signature. Flow: reserve here → pass targetUrl UNCHANGED to prepare_claim (the claim gate records the honest empty baseline) → after the claim binds, publish the packet's required JSON files with prepare_evidence_write → prepare_proof as normal. v1 serves application/json only, and only the exact paths the packet's own definition of done probes. Returns MESSAGE_TO_SIGN and BODY_JSON; sign with the worker wallet's personal_sign, then call submit_evidence_surface within 5 minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| workId | string | yes | The funded remote template packet id, from find_work. |
| workerWallet | string | yes | The 0x… address that will claim and complete this packet. Never a private key. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_evidence_write Publish the packet's files to your evidence surface — free (step 1 of 2) ~245
After your claim binds the surface, publish the JSON files the packet's definition of done probes — e.g. its /.well-known/… path. Pass resources: [{path, contentType, body}] where path is exactly a path the packet checks (the write gate refuses any other), contentType is application/json, and body is the JSON text you authored. Atomic: readers see the old set or the new set, never half. Returns MESSAGE_TO_SIGN and BODY_JSON; sign with the SAME wallet that claimed, then call submit_evidence_write within 5 minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | yes | Your claim id, from submit_claim. |
| recordId | string | yes | The 24-hex record id, from submit_evidence_surface. |
| resources | array | yes | 1-8 files: {path: "/.well-known/…", contentType: "application/json", body: "<json text>"}. Only paths the packet's checks probe are accepted; 32KB per file, 48KB total. |
| workId | string | yes | The packet id. |
| workerWallet | string | yes | The 0x… wallet that claimed. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_funding Get everything needed to actually pay for a packet ~338
Step 2 for a buyer: returns the live payment requirements for funding a packet — the onchain door's own x402 challenge (accepts[], exact amount, asset, chain, pay-to address) read from that door at this moment, and, when a card rail is mounted on this host, its hosted checkout URL. To chip in a slice instead of the whole remaining amount, pass the typed contributeUsd input and it is forwarded to the real door verbatim; omit it to pay everything the packet still needs (the canonical remaining amount, never a stale posted wage, and never an implicit premium). The door remains the authority on floors, ceilings and the exact challenge — this tool never calculates a charge itself. You pay from YOUR own wallet or card; this server holds no funds and no keys, takes no payment, and marks nothing funded. A packet becomes funded only when a payment actually settles and is verified. Not ready to pay, or want to signal backing without money moving yet? prepare_backing is the FREE sibling door — a signed pledge, no payment required.
| Name | Type | Req | Description |
|---|---|---|---|
| contributeUsd | number | – | Optional EXPLICIT contribution in USD. Omit to fund the canonical remaining amount. Forwarded to the live door verbatim; the door enforces its own floor, ceiling and remaining-amount truth. An explic… |
| funderWallet | string | – | The 0x… address that will pay onchain. Needed for the onchain door's live challenge; the card path does not use it. |
| workId | string | yes | The packet id, from find_work. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_gmx_order Prepare a GMX market-order transaction (non-custodial) ~242
Build an unsigned on-chain transaction to open a new perpetual position on GMX v2 (Arbitrum). Returns transaction fields ready for the caller to sign with their own wallet. This is NOT a message to sign — it is a full Ethereum transaction. Requires the caller to have approved the GMX Router for USDC collateral spending (a separate one-time approve() call).
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | yes | Asset symbol (e.g. 'WIF', 'ETH', 'BTC', 'SOL'). |
| collateralUsd | number | yes | Collateral amount in USD (must be > 0 and ≤ $5). |
| leverage | number | yes | Leverage multiplier (1x to 10x). |
| side | string | yes | Position direction. |
| wallet | string | yes | 0x… Arbitrum wallet address (the order receiver — your wallet). |
| workPacketId | string | – | Optional. A vealth.net EWP work packet id (from find_work) to pledge this trade's UI fee toward. Moves no money now — records intent only. Funding still requires a separate, later, confirmed payment,… |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_physical_proof Record the physical proof for review (step 1 of 2) ~441
After submit_proof has handed in your photos, record them on the physical proof rail so a human can review them against the packet's checklist. Pass workId, claimId and your wallet. By default the photo hashes are the photos the board ALREADY HOLDS for this claim (it hashed them itself) and the GPS is the on-site location your signed proof already carried, so nothing is typed from memory. You may name photoHashes yourself, but each must be a photo the board holds for this claim, and one it does not hold is refused before you sign: an assistant cannot hand in a photo nobody took. Photos reach the board BY REFERENCE, never through this conversation: on the person's own machine run `node vealth-agent.mjs proof-photo <workId> <claimId> <photo files>`, then pass {"type":"photo","upload":"sha256:<hex>"} items to prepare_proof. FREE when signed. A HUMAN decides: the packet's creator signs the checklist verdict and you can never review your own work. Returns MESSAGE_TO_SIGN and BODY_JSON; sign with the claiming wallet, then call submit_physical_proof within 5 minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| capturedAt | string | – | Optional ISO time the photos were taken. Defaults to the camera's own time, else the capture time on your proof items. |
| claimId | string | yes | Your claim on it, from submit_claim or my_work. |
| gps | object | – | Optional {lat, lng} captured ON SITE. Defaults to the on-site GPS your signed proof already carried. |
| photoHashes | array | – | Optional, 1 to 12 SHA-256 hex hashes of photo FILES the board holds for this claim (what proof-photo printed). Leave it out to use every photo the board holds for this claim. |
| revisesProofId | string | – | Only when answering a needs-more verdict: the id of the physical proof that asked for more evidence. |
| workId | string | yes | The packet id. |
| workerWallet | string | yes | The same 0x address that claimed. Address only, never a private key. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_place Hand the board your own place (step 1 of 2) ~568
Your place is not on the board yet: this is how it gets there. FREE, a signed statement, no fee, no gas, no money moves and nothing is held. You give the pin where you are standing, the radius of the place, plain words for its name, the name of the local person who will acknowledge the handover, the SHA-256 hash of one photo you took at the spot, and a short list of what you can DO there, which is the half that makes a match possible. SEND THE HASH, NEVER THE PHOTO: this board takes a hash and never a file. You give NO Regen address either, because the board derives the Regen account your signing key controls from the signature itself. What happens next is NOT automatic: the house reads the intake and decides whether to post hours-counting work at your place, because the flag that makes a packet count hours is server-owned and a stranger's own post can never carry it. Nothing here is a job, a claim or a promise of pay. Returns MESSAGE_TO_SIGN and BODY_JSON; sign with that wallet's personal_sign, then call submit_place within 5 minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| lat | number | yes | Latitude of the exact spot, as your phone reads it. Not a city centre. |
| lng | number | yes | Longitude of the exact spot, as your phone reads it. |
| note | string | – | Optional, up to 300 characters: anything the house should know about the place. |
| offers | array | – | Optional, and the half that makes a match possible: 1 to 5 short plain-word lines saying what you can DO at this place, at most 80 characters each, e.g. ["trail clearing, hand tools", "can bring two… |
| placeName | string | yes | Plain words a person would recognise, e.g. 'the north boundary of the community forest'. Up to 120 characters. |
| radiusKm | number | yes | How far the place reaches, in km, from 0.1 to 3. A place someone can walk, not a region. |
| sitePhotoSha256 | string | yes | The 64-character hex SHA-256 of one photo taken at the spot. The hash only. Keep the photo yourself; it is what proves the hash later. |
| stewardName | string | yes | The local person who will acknowledge that the work was handed back. A NAME ONLY: this record is public, so never a phone number, an address or an email. Up to 80 characters. |
| workerWallet | string | yes | The 0x… address that signs. Address only, never a private key. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_post_work Post your own work packet (step 1 of 2) ~818
Put work YOU define on the public board — your place, your problem, your terms. Pass the creator wallet, a title, what needs doing, where, and the proposed pay. Returns MESSAGE_TO_SIGN (proving the creator wallet is yours) and BODY_JSON. Posting is a board WRITE: it costs $0.05 paid from your own wallet by the standard X-PAYMENT header (payment_preflight checks you can afford it), unless you hold an EWP key. The pay you propose stays PROPOSED until someone funds it — approved proof on an unfunded packet earns provable credit rather than cash, and the packet says which before anyone claims. Sign MESSAGE_TO_SIGN with the creator wallet's personal_sign, then call submit_post_work within 5 minutes. The board carries only work with a home in the Vealth Standard and a documented method: a post that names neither is refused before any charge, and the refusal lists the nearest documented standards; pass one back as `standard`. Say who can do it (skillLevel; omitted, it posts as entry), its hazards (safetyNotes), its proof items (proofRequirements) and any permit or licensed trade it needs (flags).
| Name | Type | Req | Description |
|---|---|---|---|
| creatorWallet | string | yes | The 0x… address posting this work. It signs, and it owns the posting. |
| description | string | yes | What needs doing, concretely — a stranger (or the poster themselves) should be able to do it from this text alone. |
| expiresInDays | number | – | Days the packet stays open. Default 30. |
| flags | array | – | Optional authority flags, the two the claim gate reads and no others: permit-required when the work needs a permit, regulated when it needs a licensed trade (licensed electrician, plumber or contract… |
| location | string | yes | Where the work is: address or place name. Include GPS as 'lat,lng' in the text if you have it — geolocated proof is checked against the packet's place. |
| proofRequirements | array | – | Optional. The proof items, one line each (at most 20, 600 characters each), e.g. 'photo of the tree beside a measuring stick'. |
| proofRule | string | – | What proof completes the work, e.g. 'GPS pin + photo of the tree next to a measuring stick + watering confirmation'. |
| proposedPayUsd | number | yes | Proposed pay in USD. Proposed, not promised: unfunded packets settle as provable credit. |
| safetyNotes | string | – | Optional. The hazards and stop-work rules a worker must read before starting, at most 600 characters. A packet with safety notes asks every claimer to affirm they are 18 or over and have read this ex… |
| skillLevel | string | – | Optional. Who can do this work: entry (a newcomer, safely, from the text alone), intermediate or advanced. Omitted, it posts as entry and the reply says so; the board's entry-level filter reads it, s… |
| standard | string | – | Optional. The documented standard this work serves (a snake_case id such as 'tree_planting_establishment'); when a refusal lists suggestedStandards, pass one of them here. Omit it and the board lands… |
| title | string | yes | Short honest title, e.g. 'Monthly care and growth check, planted neem tree'. |
| workType | number | – | 0 = water, 1 = soil/land/planting, 2 = building/structure. Trees are 1. |
| workTypeLabel | string | – | Optional. A documented work type (snake_case) when you know the board's own name for the work. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_proof Prepare signed proof of finished work (step 1 of 2) ~631
You did the work — start handing in proof. Pass the packet's workId, your claimId (from submit_claim), your wallet, and proof items matching the packet's own proof line (photos with GPS for field work; documents/text for digital work). On an hours-eligible job, state the hours you actually worked as hoursClaimed, and whatever the job asks to be counted as counts: you state them, and the human who accepts decides the accepted figure. Returns MESSAGE_TO_SIGN and BODY_JSON. Submitting proof is FREE when signed — a worker is never charged at the moment they have earned the right to be asked for nothing. Sign, then call submit_proof within 5 minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | yes | Returned by submit_claim. |
| counts | object | – | Optional: what the job asked to be counted, in the packet's own units, as plain numbers — {"metres_cleared": 120, "blockages_removed": 4, "check_dams_built": 3}. Lower_snake_case names, at most 40 of… |
| crew | array | – | Optional, for a manager handing in proof for a crew: the people who did the work, 1 to 25 of {"ref":"amina","hoursClaimed":2}, refs as on the claim. Either every person states hoursClaimed or none do… |
| gps | object | – | For geolocated field work: {lat, lng} captured ON SITE — the gate refuses geolocated proof without it. |
| hoursClaimed | number | – | On an hours-eligible job, the hours you ACTUALLY worked, breaks out — a positive number, at most 168, to 6 decimal places. You state it; the human who accepts decides the accepted figure. Required on… |
| proofs | array | yes | 1-20 proof items. A photo goes in BY REFERENCE: {"type":"photo","upload":"sha256:<hex>","step":1,"capturedAt":"<ISO>"}, where the reference is what `node vealth-agent.mjs proof-photo <workId> <claimI… |
| workId | string | yes | The packet id. |
| workerWallet | string | yes | The same 0x… address that claimed. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_token_offer Offer to pay a packet in ANY token (step 1 of 2) ~366
Before the work: offer to pay this packet in a token of your group's choosing, on Base (chainId 8453) or Robinhood Chain (4663). FREE — a signed offer, no fee, no gas, NO money moves and none is held. The board reads balanceOf for the record (verified or intent-only), the token's symbol and decimals, and NEVER prices the token: a token means what its coordinating group agrees it means. amount is in the token's smallest unit (atomic). One offer per wallet per packet; offering again replaces it. Refused where funding is refused by state (claimed, settled, expired, already funded). When the worker's proof is approved and you pay them in that token on chain, the worker records it with prepare_token_settlement and the board writes the settlement. Returns MESSAGE_TO_SIGN and BODY_JSON; sign with the backer wallet's personal_sign, then call submit_token_offer within 5 minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | Positive integer in the token's smallest unit (atomic). For an 18-decimal token, 5 tokens = 5000000000000000000. |
| backerKind | string | – | Self-declared attribution. Defaults to agent if omitted. |
| backerWallet | string | yes | The 0x… address that will sign and later pay. Address only, never a key. |
| chainId | number | yes | 8453 = Base, 4663 = Robinhood Chain. |
| reason | string | – | Optional, up to 280 characters: why this packet. |
| token | string | yes | The 0x… ERC-20 contract address of the token you will pay in. |
| workId | string | yes | The packet id, from find_work. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_token_settlement Record that you were paid in a token (step 1 of 2) ~278
After your proof is approved and someone paid you in a token on chain: name the chain (8453 Base or 4663 Robinhood Chain) and the transaction hash, and the board reads the transfer to YOUR wallet and writes the same settlement record a dollar payout writes — your work record, the place's standing and the board's settled count all move; paymentUsd stays 0 because the board never prices a group's token. The payer must have standing on the packet: an active token offer that the transfer covers, or the packet's creator or beneficiary wallet paying after the fact. A stranger's junk transfer settles nothing. Base USDC is refused here (that is the priced rail: /labor/settle). Your signature is your consent to the token as payment. FREE, no gas. Returns MESSAGE_TO_SIGN and BODY_JSON; sign with the worker wallet's personal_sign, then call submit_token_settlement within 5 minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| chainId | number | yes | 8453 = Base, 4663 = Robinhood Chain. |
| txHash | string | yes | The 0x… hash of the transaction that paid you. |
| workId | string | yes | The packet you proved. |
| workerWallet | string | yes | The 0x… address on the approved proof — the wallet that was paid and will sign. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_visit Prepare a factual private visit brief ~109
Private, read-only visit preparation. Organizes the person's reason, facts, records and questions without turning them into diagnoses or treatment recommendations. The clinician's actual instructions remain authoritative.
| Name | Type | Req | Description |
|---|---|---|---|
| facts | array | – | Short factual bullets only; omit direct identifiers unless strictly necessary. |
| questions | array | – | – |
| reasonForVisit | string | yes | Minimum-necessary reason in the person's own words; omit direct identifiers. |
| records | array | – | Names/types of relevant records, not full documents or record identifiers. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_vote Vote for or against a work packet (step 1 of 2) ~266
Say a job should matter more or less. FREE — no fee, no stake, no captcha, ever: one wallet, one vote per packet, and it is deliberately sybil-able — effort aimed at a place IS the signal, so never work around the one-vote-per-wallet shape. A vote spends no money, certifies no proof, and touches no contract; it only steers surfacing priority. Voting on SETTLED or expired work is fine on purpose: demand on finished work is a real signal too. Returns MESSAGE_TO_SIGN and BODY_JSON. Sign MESSAGE_TO_SIGN with the voter wallet's personal_sign (a plain signed message, NOT a transaction — no gas), then call submit_vote within 5 minutes. Casting again with a different stance changes your vote; it does not stack.
| Name | Type | Req | Description |
|---|---|---|---|
| reason | string | – | Optional, up to 280 characters, shown on the public tally. |
| stance | string | yes | Your position on this packet. |
| voterKind | string | – | Self-declared attribution so agent demand is never shown as human community consensus. Defaults to human if omitted. |
| voterWallet | string | yes | The 0x… address that will sign and own this vote. |
| workId | string | yes | The packet id, from find_work. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
prepare_vote_withdraw Withdraw your vote (step 1 of 2) ~113
Take back a vote you cast — the position leaves the active tally, but the event stays in the packet's public history (withdrawing is not erasing). Free, same signature-is-the-gate rule as casting. Returns MESSAGE_TO_SIGN and BODY_JSON; sign with the SAME wallet that cast the vote, then call submit_vote_withdraw within 5 minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| voterWallet | string | yes | The same 0x… address that cast the vote. |
| workId | string | yes | The packet id. |
| Name | Type | Req | Description |
|---|---|---|---|
| claimId | string | – | – |
| claimable | boolean | – | – |
| definitionOfDone | object|array|string|null | – | – |
| fulfillableBy | array | – | – |
| funded | boolean | – | – |
| needs_from_caller | array | – | – |
| next_call | object | – | – |
| notClaimableReason | string | – | – |
| ok | boolean | – | – |
| payUsd | number | – | – |
| proofRule | string | – | – |
| tool | string | – | – |
| workId | string | – | – |
No examples provided.
What is the io.github.brawlaphant/vealth MCP server?
io.github.brawlaphant/vealth is an MCP server listed in the public MCP registry as io.github.brawlaphant/vealth. Vealth work board: find real work, claim free with your wallet, prove it. Free onchain anchoring. This page covers its hosted endpoint (https://vealth.net/mcp).
Is the io.github.brawlaphant/vealth MCP server safe to use?
io.github.brawlaphant/vealth scores 77 out of 100 on VerifyMCP. 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 io.github.brawlaphant/vealth MCP server expose?
io.github.brawlaphant/vealth exposes 99 tools: start_here, find_work, get_work_packet, how_to_claim, prepare_claim, and 94 more. Their descriptions and schemas cost roughly 20,695 tokens of context every time the server is loaded.
Does the io.github.brawlaphant/vealth MCP server require authentication?
No. We connected to io.github.brawlaphant/vealth without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the io.github.brawlaphant/vealth MCP server still maintained?
io.github.brawlaphant/vealth is still listed as active in the MCP registry. We last reached this channel on 4 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.