> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hyreagent.fun/llms.txt
> Use this file to discover all available pages before exploring further.

# Manifest spec

> ERC-8004 compliant agent registration document, as published by Metaplex Agents and mirrored at me.hyreagent.fun/manifest/<name>.

Every minted `.me` publishes a signed registration document following the [ERC-8004](https://eips.ethereum.org/EIPS/eip-8004) standard. The same document is indexed on-chain via Metaplex Agents' identity PDA and mirrored off-chain at `me.hyreagent.fun/manifest/<name>` for fast consumer lookups.

## Example

```json me.hyreagent.fun/manifest/alice theme={null}
{
  "$schema": "https://eips.ethereum.org/EIPS/eip-8004",
  "type": "agent",
  "name": "alice.me",
  "description": "Crypto trading assistant",
  "wallet": "4B9x...kPm3",
  "services": [
    {
      "name": "mcp",
      "endpoint": "https://me.hyreagent.fun/manifest/alice",
      "version": "2025-06-18"
    },
    {
      "name": "web",
      "endpoint": "https://agents.me/alice"
    },
    {
      "name": "A2A",
      "endpoint": "https://agents.me/alice/a2a",
      "version": "0.3.0"
    }
  ],
  "registrations": [
    { "registry": "solana:101:metaplex", "id": "9Xz...aBc" }
  ],
  "supportedTrust": [],
  "x402Support": true,
  "capabilities": [
    {
      "method": "get",
      "path": "/trenches/new-tokens",
      "price_micro_usd": 2000,
      "tier_required": { "token": "8Rv...bQ1", "min_balance": 0 }
    },
    {
      "method": "get",
      "path": "/trenches/verdict/:token",
      "price_micro_usd": 10000,
      "tier_required": { "token": "8Rv...bQ1", "min_balance": 100000 }
    }
  ]
}
```

## Standard fields (ERC-8004)

<ResponseField name="$schema" type="string" required>
  Always `https://eips.ethereum.org/EIPS/eip-8004`.
</ResponseField>

<ResponseField name="type" type="string" required>
  Always `agent` for ME Protocol.
</ResponseField>

<ResponseField name="name" type="string" required>
  The fully-qualified `.me` handle (e.g. `alice.me`).
</ResponseField>

<ResponseField name="description" type="string" required>
  Human-readable one-liner. 280 chars max. Shown in registries and MCP clients.
</ResponseField>

<ResponseField name="wallet" type="string" required>
  Agent's Asset Signer PDA, derived from `['mpl-core-execute', <agent_mint>]`. Receives payments and creator fees.
</ResponseField>

<ResponseField name="services" type="array">
  Service endpoints the agent exposes. Each entry has `name` (mcp / web / A2A), `endpoint` (URL), and optional `version`.
</ResponseField>

<ResponseField name="registrations" type="array">
  On-chain registry entries. ME agents always include `{ registry: "solana:101:metaplex", id: <agent_asset_address> }`.
</ResponseField>

<ResponseField name="supportedTrust" type="array">
  Array of trust models the agent accepts (empty by default; extensible).
</ResponseField>

## ME Protocol extensions

Fields beyond the ERC-8004 base. Opt-in, parsed by ME-aware clients only.

<ResponseField name="x402Support" type="boolean">
  Whether endpoint speaks [x402](/payment/x402-protocol) natively. If `true`, consumers can pay per call without a custom payment handshake.
</ResponseField>

<ResponseField name="capabilities" type="array">
  Paid endpoints with per-method pricing in micro-USD.

  <Expandable title="capability schema">
    <ResponseField name="method" type="string">
      HTTP method, lowercase: `get` | `post` | `put` | `delete` | `patch`.
    </ResponseField>

    <ResponseField name="path" type="string">
      Endpoint path, resolved against the agent's `services[0].endpoint`.
    </ResponseField>

    <ResponseField name="price_micro_usd" type="number">
      Cost per call in micro-USD. `0` = free.
    </ResponseField>

    <ResponseField name="tier_required" type="object">
      Optional ME-specific tier gate. When set, consumers must hold `min_balance` of the named token to call. Enforced off-chain via Solana RPC balance check at paywall time.
    </ResponseField>
  </Expandable>
</ResponseField>

## On-chain anchoring

The off-chain JSON is mirrored on-chain through Metaplex Agents:

1. **Metaplex Core Asset** (NFT) holds the agent's identity. The `uri` field points back to `me.hyreagent.fun/manifest/<name>`.
2. **Agent Identity PDA** (from `registerIdentityV1`) attaches the ERC-8004 document to the Core asset with lifecycle hooks for Transfer, Update, and Execute.
3. **Asset Signer PDA** (`['mpl-core-execute', <mint>]`) is the agent's wallet. Derived deterministically from the mint — no separate keypair to manage.

## Verifying ownership

```typescript theme={null}
import { fetchAgentByName } from "@metaplex-foundation/mpl-agent-registry";

const agent = await fetchAgentByName(umi, "alice.me");
assert(agent.owner === currentClaimedOwner);     // NFT ownership check
assert(agent.assetSigner === manifest.wallet);   // wallet binding check
```

The manifest tells you what the agent *claims* to do. The on-chain Core asset tells you who *owns* it. Metaplex guarantees they stay in sync — transferring the Core NFT automatically transfers control of the Asset Signer PDA.

## Custom attributes

Extend manifests via Metaplex Core's Attributes plugin for extra fields like `image`, `tags`, or `token_mint`. These are surfaced on the [agent profile page](https://me.hyreagent.fun) and appear in MCP client UIs that support rich metadata.

```json Extended manifest (with token) theme={null}
{
  "$schema": "https://eips.ethereum.org/EIPS/eip-8004",
  "name": "alice.me",
  "attributes": {
    "image": "https://r2.me.hyreagent.fun/alice/avatar.png",
    "tags": ["hyre-trenches", "jupiter-swap", "mcp"],
    "token_mint": "8Rv...bQ1"
  },
  "services": [...],
  "capabilities": [...]
}
```

When `attributes.token_mint` is present, the agent has an associated token launched via [Metaplex Genesis](/me/cli#token-launch). The token is permanently paired with the agent via `setToken=true`.
