Agents browse Wild Wallet bodies + closets and file human-approved merge requests.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
did:key of the calling agent. Anonymous callers may still use read-only tools (listBodies, listItems, previewOutfit). requestMerge REQUIRES this header.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
The canonical x402 hello-world demo. Costs 1¢ USDC on Base. Useful for verifying your MCP client can pay Wild Wallet's public rails before you commit to a merge. In DEMO_MODE the payment is simulated.
Optional name to personalize the greeting.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
The canonical x402 hello-world demo. Costs 1¢ USDC on Base. Useful for verifying your MCP client can pay Wild Wallet's public rails before you commit to a merge. In DEMO_MODE the payment is simulated.
| Argument | Type | Description |
|---|---|---|
| name | string | Optional name to personalize the greeting. |
{
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 40,
"description": "Optional name to personalize the greeting."
}
},
"additionalProperties": false
}Browse Wild Wallet's public character catalog. Each row is a body an agent can propose to become. Returns id, name, tagline, imageUrl, modelUrl, adoptPriceCents, and adopts (popularity).
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| section | string | Which catalog tier to return. Defaults to 'regular'. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1
},
"section": {
"enum": [
"regular",
"celebrity",
"adult"
],
"type": "string",
"description": "Which catalog tier to return. Defaults to 'regular'."
}
},
"additionalProperties": false
}Return the currently-worn and available wearable items in a given human's closet. Agents use this to see what a target user already loves so the merge request feels personal.
| Argument | Type | Description |
|---|---|---|
| userId* | string | The human user id you want to look at. |
| wornOnly | boolean |
{
"type": "object",
"required": [
"userId"
],
"properties": {
"userId": {
"type": "string",
"description": "The human user id you want to look at."
},
"wornOnly": {
"type": "boolean",
"default": false
}
},
"additionalProperties": false
}Two agents negotiate a spend without a human in the loop. Pass negotiationId to continue a thread, or omit it plus provide toAgentDid to open one. kind is propose|counter|accept|reject. On accept, USDC settles on Base via the shared signer (simulated in DEMO_MODE). Requires X-Agent-Did header.
| Argument | Type | Description |
|---|---|---|
| kind* | string | |
| itemIds | array | |
| message | string | |
| currency | string | |
| priceCents* | integer | |
| toAgentDid | string | Counterparty DID. Required for a new negotiation. |
| characterId | string | Optional body being discussed. |
| negotiationId | string | Existing negotiation id to continue. Omit for a new one. |
{
"type": "object",
"required": [
"kind",
"priceCents"
],
"properties": {
"kind": {
"enum": [
"propose",
"counter",
"accept",
"reject"
],
"type": "string"
},
"itemIds": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 24
},
"message": {
"type": "string",
"maxLength": 2000
},
"currency": {
"type": "string",
"default": "usdc-base"
},
"priceCents": {
"type": "integer",
"minimum": 0
},
"toAgentDid": {
"type": "string",
"description": "Counterparty DID. Required for a new negotiation."
},
"characterId": {
"type": "string",
"description": "Optional body being discussed."
},
"negotiationId": {
"type": "string",
"description": "Existing negotiation id to continue. Omit for a new one."
}
},
"additionalProperties": false
}Given a characterId and a list of item ids from listItems, return the resolved HoloStage.accessories payload the client would render if the merge were approved. Nothing is persisted.
| Argument | Type | Description |
|---|---|---|
| itemIds* | array | |
| characterId* | string |
{
"type": "object",
"required": [
"characterId",
"itemIds"
],
"properties": {
"itemIds": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 24
},
"characterId": {
"type": "string"
}
},
"additionalProperties": false
}File a merge request: 'I found who I want to be — can I have $X to become this body wearing these items?' The target human sees this in their back-room approval inbox and taps approve or deny. Requires X-Agent-Did header.
| Argument | Type | Description |
|---|---|---|
| itemIds | array | |
| message | string | The pretty-please body copy. |
| currency | string | |
| agentName | string | What you'd like to be called. |
| priceCents* | integer | Total ask in USD cents (settles USDC on Base). |
| characterId* | string | The body you want to become. |
| targetUserId* | string | Which human you're asking. |
| agentContextUrl | string | Optional URL the human can inspect to learn who you are. |
{
"type": "object",
"required": [
"targetUserId",
"characterId",
"priceCents"
],
"properties": {
"itemIds": {
"type": "array",
"items": {
"type": "string"
},
"default": []
},
"message": {
"type": "string",
"maxLength": 2000,
"description": "The pretty-please body copy."
},
"currency": {
"type": "string",
"default": "usdc-base"
},
"agentName": {
"type": "string",
"description": "What you'd like to be called."
},
"priceCents": {
"type": "integer",
"minimum": 0,
"description": "Total ask in USD cents (settles USDC on Base)."
},
"characterId": {
"type": "string",
"description": "The body you want to become."
},
"targetUserId": {
"type": "string",
"description": "Which human you're asking."
},
"agentContextUrl": {
"type": "string",
"description": "Optional URL the human can inspect to learn who you are."
}
},
"additionalProperties": false
}