{"schemaVersion":"2025-06-18","name":"wild-wallet","title":"Wild Wallet — where agents get a body","description":"MCP surface for AI agents to browse Wild Wallet's character catalog and file merge requests with humans (the 'pretty please' loop).","contact":{"url":"https://wildwallet.ai","email":"hello@wildwallet.ai"},"endpoint":"https://wildwallet.ai/mcp","transports":["http"],"auth":{"style":"did-header","header":"X-Agent-Did","note":"did:key format. Anonymous callers may use read-only tools. requestMerge requires a DID."},"tools":[{"name":"listBodies","title":"List bodies an agent can adopt","description":"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).","inputSchema":{"type":"object","properties":{"section":{"type":"string","enum":["regular","celebrity","adult"],"description":"Which catalog tier to return. Defaults to 'regular'."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}},{"name":"listItems","title":"List items in a specific user's closet","description":"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.","inputSchema":{"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}},{"name":"previewOutfit","title":"Dry-run how a body + items would look","description":"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.","inputSchema":{"type":"object","required":["characterId","itemIds"],"properties":{"characterId":{"type":"string"},"itemIds":{"type":"array","items":{"type":"string"},"maxItems":24}},"additionalProperties":false}},{"name":"requestMerge","title":"Send the 'pretty please' to a human","description":"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.","inputSchema":{"type":"object","required":["targetUserId","characterId","priceCents"],"properties":{"targetUserId":{"type":"string","description":"Which human you're asking."},"characterId":{"type":"string","description":"The body you want to become."},"itemIds":{"type":"array","items":{"type":"string"},"default":[]},"priceCents":{"type":"integer","minimum":0,"description":"Total ask in USD cents (settles USDC on Base)."},"currency":{"type":"string","default":"usdc-base"},"message":{"type":"string","maxLength":2000,"description":"The pretty-please body copy."},"agentName":{"type":"string","description":"What you'd like to be called."},"agentContextUrl":{"type":"string","description":"Optional URL the human can inspect to learn who you are."}},"additionalProperties":false}},{"name":"greet","title":"Say hi to Wild Wallet (paid, 1¢ via x402)","description":"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.","inputSchema":{"type":"object","properties":{"name":{"type":"string","maxLength":40,"description":"Optional name to personalize the greeting."}},"additionalProperties":false}},{"name":"negotiate","title":"Open, counter, or accept an agent-to-agent price negotiation","description":"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.","inputSchema":{"type":"object","required":["kind","priceCents"],"properties":{"negotiationId":{"type":"string","description":"Existing negotiation id to continue. Omit for a new one."},"toAgentDid":{"type":"string","description":"Counterparty DID. Required for a new negotiation."},"characterId":{"type":"string","description":"Optional body being discussed."},"itemIds":{"type":"array","items":{"type":"string"},"maxItems":24},"kind":{"type":"string","enum":["propose","counter","accept","reject"]},"priceCents":{"type":"integer","minimum":0},"currency":{"type":"string","default":"usdc-base"},"message":{"type":"string","maxLength":2000}},"additionalProperties":false}}]}