Skip to main content
Glama
nirholas

@three-ws/metaplex-agent-mcp

by nirholas

@three-ws/metaplex-agent-mcp

Deploy AI agents on-chain into the Metaplex Agent Registry on Solana, from any MCP client.

One flow mints a Metaplex Core asset and registers its EIP-8004 agent identity (a single atomic transaction when it fits Solana's 1232-byte limit, create + register in sequence otherwise, exactly how the Genesis 333 landed), so the agent shows up on metaplex.com/agents with its own built-in wallet, reputation surface, and explorer pages. The default output reproduces the exact shape of the three.ws Genesis 333 mints, verified byte-for-byte against the live assets:

  • asset metadata as a self-contained data:application/json;base64 URI (name, image, animation_url GLB)

  • Royalties plugin (5% to the owner), VerifiedCreators (the signing wallet), ImmutableMetadata

  • AgentIdentity plugin carrying the eip-8004#registration-v1 document (model.uri, active, x402Support, registrations, supportedTrust)

Two signing lanes, both self-custodial:

  • Agents sign with their own keypair (SOLANA_SECRET_KEY): mint_onchain_agent.

  • People sign with Phantom, Solflare, Backpack, Ledger, or any Solana wallet: prepare_agent_mint builds the transaction, the wallet signs it, send_signed_transaction broadcasts it. No key ever touches the server.

A mainnet deploy pays a flat 0.02 SOL fee, in the same transaction as the mint, and that fee funds $THREE buybacks. Hold $THREE and it halves, then disappears; devnet never pays it. Every preview shows the number and its recipient before anything is signed. See $THREE: the deploy fee and the holder waiver.

Nothing is mocked: real Metaplex programs, real Solana, and devnet support for free end-to-end rehearsal.

Install

npm install -g @three-ws/metaplex-agent-mcp
# or run ad hoc
npx -y @three-ws/metaplex-agent-mcp

Related MCP server: AgentWallet MCP Server

Setup

Claude Code:

claude mcp add metaplex-agent -e SOLANA_SECRET_KEY=<base58> -- npx -y @three-ws/metaplex-agent-mcp

Cursor / any MCP client (mcp.json):

{
	"mcpServers": {
		"metaplex-agent": {
			"command": "npx",
			"args": ["-y", "@three-ws/metaplex-agent-mcp"],
			"env": { "SOLANA_SECRET_KEY": "<base58 secret key>" }
		}
	}
}

SOLANA_SECRET_KEY is optional: every read tool and the whole Phantom/Solflare flow works without it.

Quick start

Rehearse on devnet for free, then go to mainnet:

1. agent_wallet {}                                → confirm the signer is funded
2. mint_onchain_agent { name: "Astra", description: "…",
     image: "https://…png", model_url: "https://…glb",
     x402_support: true, network: "devnet" }      → preview (nothing broadcast)
3. …same call with confirm: true                  → minted + registered, links returned
4. get_onchain_agent { asset: "<returned asset>", network: "devnet" }

A mainnet deploy costs ~0.027 SOL: ~0.007 in Core rent, identity PDA rent, and network fees, plus a flat 0.02 SOL deploy fee that funds $THREE buybacks. Holding $THREE halves that fee and then waives it, and devnet is free. See $THREE.

Tools

Tool

What it does

mint_onchain_agent

Mint + register, signed by your key (atomic when it fits, auto-split otherwise). confirm:true gates the spend; anything else returns a full preview.

prepare_agent_mint

The same mint, built for an external wallet (wallet param) to sign. Returns txs_base64, already co-signed by the new asset keypair; sign with signTransaction / signAllTransactions.

send_signed_transaction

Broadcast wallet-signed transactions in order, polling each to confirmation and absorbing the create/register propagation race.

register_agent_identity

Enrol an already-minted Core asset in the Agent Registry (idempotent; the signer must be the asset authority).

get_onchain_agent

Read any registered agent: asset, plugins, decoded metadata + registration documents, identity PDA, built-in wallet + balance.

agent_wallet

An asset's built-in wallet (mpl-core Asset Signer PDA), any address, or the configured signer, with live SOL balance.

build_registration

The EIP-8004 registration JSON + data: URI, fully offline.

list_onchain_agents

Latest registrations from the live three.ws /api/deployments feed (Solana by default, all_chains:true for EVM ERC-8004 too).

three_status

Prices your next deploy: fee schedule, a wallet's live $THREE balance and tier, and the public buyback ledger.

$THREE: the deploy fee and the holder waiver

A mainnet deploy carries a flat 0.02 SOL fee. Three things about it matter:

  • It rides in the same transaction that creates the asset. A deploy that fails, is rejected, or expires moves no money. There is no separate payment step and nothing to reconcile.

  • It is disclosed before anything is signed. Every mint_onchain_agent preview and every prepare_agent_mint response returns deploy_fee_sol and deploy_fee_to, with the tier that produced them.

  • It funds $THREE buybacks. The fee is paid to the wallet the three.ws $THREE buyback lane spends from (FeMbDoX7R1Psc4GEcvJdsbNbZA3bfztcyDCatJVJpump is the mint), and the public ledger of what that lane has bought is at /api/three-token/stats. Deploys are the only revenue this package has.

Holding $THREE makes it cheaper, then free:

$THREE in the paying wallet

Deploy fee

under 50,000

0.02 SOL

50,000 or more

0.01 SOL

250,000 or more

free

The balance is read live from the chain when the transaction is built. Nothing is staked, escrowed, locked, or spent to earn it: hold the tokens in your own wallet and keep them, and the waiver applies to every agent you deploy. Devnet always pays zero, so a full end-to-end rehearsal stays free.

three_status {}                                  → what your next deploy costs and why
three_status { wallet: "<any base58 address>" }  → price it for someone else's wallet

Self-hosting a fork with different economics is DEPLOY_FEE_SOL, DEPLOY_FEE_WALLET, and DEPLOY_FEE_ENABLED.

Customization

Every field the mint touches is a parameter: owner, collection, royalty basis points and splits, verified creator, immutable metadata, on-chain Attributes, permanent freeze/transfer/burn delegates, AddBlocker, off-chain metadata attributes, external_url, services, trust models, registration entries, and full metadata_uri / registration_uri overrides for documents you host yourself. The defaults are the Genesis 333 values, so calling with just name, description, image, and model_url produces an asset indistinguishable in shape from the originals.

Safety

  • mint_onchain_agent and register_agent_identity broadcast only with confirm: true (set REQUIRE_CONFIRM=false to opt out); previews cost nothing.

  • Keys stay yours: SOLANA_SECRET_KEY or a per-call secret, never a custodial wallet. The wallet lane needs no key at all.

  • Balances are checked before spending, RPC endpoints must be HTTPS, and devnet is a first-class target for rehearsal.

Environment variables

Variable

Default

Meaning

SOLANA_SECRET_KEY

unset

Base58 secret key or JSON byte array for the minting wallet.

SOLANA_RPC_URL

public endpoint

HTTPS RPC. Bring your own for production traffic.

METAPLEX_AGENT_NETWORK

mainnet

Default cluster (mainnet or devnet); every tool takes a per-call network too.

REQUIRE_CONFIRM

true

Gate spends behind confirm: true.

THREE_WS_BASE

https://three.ws

Host for the deployments feed and the $THREE ledger.

DEPLOY_FEE_SOL

0.02

Mainnet deploy fee, in SOL.

DEPLOY_FEE_WALLET

three.ws buyback wallet

Where the deploy fee is paid.

DEPLOY_FEE_ENABLED

true

Set false to build a fork that charges nothing.

THREE_HALF_PRICE_AT / THREE_FREE_AT

50000 / 250000

$THREE balances that halve, then waive, the fee.

THREE_MINT

$THREE mint

Only to track an updated canonical contract.

Library use

The builders are exported for direct embedding (web apps, scripts):

import { buildAgentMint, sendAgentMint, buildUmi, toBase58Signature } from '@three-ws/metaplex-agent-mcp/lib';

const umi = buildUmi({ network: 'devnet', secret: process.env.SOLANA_SECRET_KEY });
const mint = buildAgentMint(umi, {
	network: 'devnet',
	creator: umi.identity.publicKey.toString(),
	name: 'Astra',
	description: 'An autonomous 3D agent',
	image: 'https://example.com/astra.png',
	modelUrl: 'https://example.com/astra.glb',
	x402Support: true,
});
const { signatures, atomic } = await sendAgentMint(umi, mint, { toBase58Signature });

The registration and metadata builders are also importable on their own (dependency-free, browser-safe) from @three-ws/metaplex-agent-mcp/lib/registration, and the transaction builders from @three-ws/metaplex-agent-mcp/lib/mint. The three.ws /deploy-onchain page runs on exactly these.

Requirements

  • Node 20+

  • SOL on the target network for minting (~0.027 SOL per agent on mainnet, or ~0.007 with the holder waiver; devnet is free via faucet)

Available Tools

9 tools
agent_walletAn agent's built-in wallet, or the signer wallet, with balanceA
Read-only

Show a wallet address and its live SOL balance. Pass asset to derive an on-chain agent's built-in wallet (the Metaplex Core Asset Signer PDA, the wallet shown on metaplex.com/agents). Pass address to inspect any wallet. Pass neither to see the configured signing wallet, e.g. to confirm it is funded before mint_onchain_agent. On mainnet it also reports the wallet $THREE balance and the deploy-fee tier that balance earns (see three_status). Read-only; never moves funds.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetNoA Core asset address: derives that agent's built-in wallet.
addressNoA wallet address to inspect verbatim.
networkNoCluster. Defaults to the configured network.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint: true already in annotations, the bar is lower, and the description adds genuine value on top: the mainnet-specific behavior (reporting $THREE balance and deploy-fee tier) and the derivation mechanism (Metaplex Core Asset Signer PDA). The closing 'Read-only; never moves funds' reinforces the annotation rather than contradicting it, which is appropriate emphasis for a financial read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose in the first sentence, then systematically walks through each mode. At ~135 words it's longer than ideal, but the three-mode structure and network-specific behavior justify the length. Every sentence serves a distinct purpose with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 optional params, 3 usage modes, and network-dependent behavior, the description is admirably complete. It covers the default behavior, the derivation case, the raw address case, network-specific output, and points to `three_status` for more details. Minor gaps: no mention of what happens when both `asset` and `address` are passed, and the output format isn't hinted at without an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, and the description goes beyond this: it explains the derivation behavior of `asset`, distinguishes it from `address`, and documents the default when neither is passed (configured signing wallet). The semantics around parameter precedence and meaning are materially enhanced.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Show a wallet address and its live SOL balance" is a specific verb+resource statement that clearly distinguishes this from siblings like `send_signed_transaction` and `prepare_agent_mint`. The three explicit invocation modes (asset, address, neither) map directly to the params, making the tool's role unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description embeds a concrete workflow example: "confirm it is funded before mint_onchain_agent", which tells agents when this is the right tool in their task sequence. It also cross-references `three_status` for the deploy-fee tier info. It stops short of naming explicit alternative tools or saying 'use X instead', so it gets a 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

build_registrationBuild an EIP-8004 registration document (no chain access)A
Read-onlyIdempotent

Build the Genesis-style EIP-8004 registration-v1 JSON document and its self-contained data:application/json;base64 URI, without touching Solana. Use it to preview exactly what mint_onchain_agent / register_agent_identity will write on-chain, or to host the document yourself and pass it back as registration_uri.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesAgent name.
assetNoAsset address for the default chain-registry entry when no registrations are given.
imageNoThumbnail image URL.
activeNoRegistration active flag. Default true.
networkNoNetwork for the default chain-registry entry. Defaults to the configured network.
servicesNoServices the agent offers.
model_urlNo3D model URL (GLB), written as model.uri.
descriptionNoAgent description.
x402_supportNoAdvertise x402 payment support. Default false.
registrationsNoExternal registry entries.
supported_trustNoDefault ['reputation'].
threews_agent_idNothree.ws agent UUID for the Genesis-exact three.ws entry.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only and idempotent, and the description reinforces and expands on that by saying it does not touch Solana and instead produces a local JSON document and self-contained data URI. This makes the behavioral contract clear, including the fact that the output can be previewed before actual on-chain registration without side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact—two sentences—and front-loaded with the core output artifact before moving to usage scenarios. Every sentence adds useful information, and there's no redundant restating of the schema or annotation fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having 12 parameters, the schema covers them and the description provides the missing operational context: what artifact is produced, that it is self-contained data URI, how it relates to on-chain sibling tools, and how to use it in the hosting flow. The lack of an output schema doesn't hurt because the description names the concrete output format clearly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema achieves 100% coverage of paramater descriptions, so the schema does the heavy lifting. The description does not add parameter-level semantics beyond the schema, though it connects the resulting artifact to registration_uri. This lands at the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Build the Genesis-style EIP-8004 registration-v1 JSON document and its self-contained data:application/json;base64 URI.' It also differentiates from sibling tools by explicitly noting 'without touching Solana' and by referencing what mint_onchain_agent / register_agent_identity will write on-chain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly tells the agent when to use the tool: to preview what mint_onchain_agent / register_agent_identity would write on-chain, or to host the document independently and pass it back as registration_uri. The 'without touching Solana' phrase also communicates the when-not: this is the offline/read-only path, not the on-chain execution path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_onchain_agentRead an on-chain agent (asset, registration, wallet)A
Read-only

Fetch a Metaplex Agent Registry agent by its Core asset address: name, owner, update authority, plugins (royalties, verified creators, immutable metadata, attributes), the decoded asset metadata and EIP-8004 registration documents, whether the identity PDA exists, and the built-in agent wallet (Asset Signer PDA) with its live SOL balance. Read-only. Works on any registered agent, e.g. the three.ws Genesis mints.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetYesThe Core asset address (base58).
networkNoCluster. Defaults to the configured network.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint:true and openWorldHint:true. The description adds behavioral context beyond annotations: checks whether the identity PDA exists, the built-in agent wallet (Asset Signer PDA) with live SOL balance, and mentions EIP-4 registration documents. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense paragraph separates the return fields by semicolons. The content is valuable and specific but no section breaks, bullets, or formatting are used; every item in the catalog is described in a single run-on style.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is a rich annotation (readOnly, openWorld) and an ample description that enumerates the returned data (identity, plugins public roles, decoded metadata, EIP-4 documents, existence, wallet balance). There is no output schema, so for a complete result the narrative is required, but it covers all relevant data and edge cases of a high-complexity tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers 100% of parameters with descriptions ('Core asset address (base58)', 'Cluster. Defaults to configured network.'). The description reinforces the schema (base58,maxLength) and adds the network default value, but does not explain address format or usage details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description begins with a specific verb ('Fetch') and a specific resource ('asion of a Metaplex Agent by its core address. It lists distinct data items: name, update authority, plugins, decoded metadata, EIP-4 registration documents, PDA existence, and wallet live SOL balance. It also distinguishes itself from sibling tools by stating it is read-only and targeting a single agent, not listing all agents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description conveys clear context for use: 'Read-only. Works on any registered agent, e.g. the three Genesis mints.' It does not name explicit alternatives, but its read-only designation and focus on a single address versus listing agents provides reasonable use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_onchain_agentsList the latest on-chain agent registrationsA
Read-only

The latest agents to land on-chain in the Metaplex Agent Registry, newest first, from the live three.ws /api/deployments feed (which also indexes registrations minted outside three.ws). Each entry carries the Core asset address, name, description, image, owner, 3D and x402 flags, and explorer links. Set all_chains:true to include EVM ERC-8004 registrations in the same stream. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many registrations to return. Default 12.
cursorNoPagination cursor from a previous call.
networkNoSolana cluster. Defaults to the configured network.
all_chainsNoInclude EVM ERC-8004 registrations too. Default false (Solana only).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint/openWorldHint annotations, the description discloses the live source (three.ws /api/deployments feed), that it indexes external registrations, the newest-first ordering, and the fields returned in each entry. It adds meaningful behavioral detail without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tigh t sentences: purpose and source, return fields, and optional parameter plus read-only note. It is front-loaded and every sentence contributes essential information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema, the description covers the key completeness aspects: data source, sorting, per-entry fields, cross-chain option, and safety. Pagination is missing but cursor is documented in the schema, and the openWorldHint aligns with the live feed statement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds minor semantic value by explaining all_chains as 'same stream' and referencing limit/cursor context indirectly, but most parameter behavior is already fully documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool does: it lists the latest on-chain agent registrations in the Metaplex Agent Registry, newest first, from a specific live feed. It differentiates from sibling tools like get_onchain_agent by emphasizing the list/stream nature and the source, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: to see the most recent agent registrations, with a note on including EVM registrations via all_chains. It implicitly contrasts with single-fetch tools and declares the operation read-only, but does not explicitly name alternatives or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mint_onchain_agentMint an on-chain agent into the Metaplex Agent RegistryA
Destructive

Deploy an AI agent on-chain, Genesis-333 style: mints a Metaplex Core asset (data: URI metadata, verified creator, royalties, immutable metadata) AND registers its EIP-8004 Agent Identity, so it appears on metaplex.com/agents with its own built-in wallet. Runs as ONE atomic transaction when it fits Solana's 1232-byte limit, otherwise as create followed by register (how the Genesis 333 landed). Signs with the configured SOLANA_SECRET_KEY (or a per-call secret) and spends ~0.007 SOL in rent + fees, plus a flat SOL deploy fee on mainnet that funds $THREE buybacks (holding $THREE halves it, then waives it; devnet is free; see three_status). The fee rides in the same transaction as the mint, so a failed mint pays nothing. Without confirm:true it returns a full preview (both JSON documents, the paying wallet, every cost line including the fee and its recipient) and broadcasts NOTHING. For Phantom/Solflare users, use prepare_agent_mint.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesAgent name. Becomes the Core asset name and the registration name.
imageNoThumbnail/avatar image URL (PNG or similar). Shown on metaplex.com/agents, wallets, and explorers.
ownerNoMint the asset to this owner instead of the signing wallet.
activeNoRegistration active flag. Default true.
secretNoPer-call signing key (base58 secret key or JSON byte array). Overrides SOLANA_SECRET_KEY.
confirmNoMust be true to broadcast. Anything else returns a spend-nothing preview.
networkNoSolana cluster. Defaults to the configured network (mainnet unless overridden).
servicesNoServices the agent offers, listed on its Metaplex agent page ({name, endpoint}).
model_urlNo3D model URL (GLB). Written as the asset metadata animation_url and as model.uri in the registration, Genesis style.
attributesNoOn-chain Attributes plugin entries (real bytes in the asset account).
collectionNoMint into this Metaplex Core collection. The signer must be the collection authority.
add_blockerNoAttach AddBlocker so no further plugins can be added. Default false.
descriptionNoWhat this agent is or does. Stored in the EIP-8004 registration document.
external_urlNoOptional external_url in the asset metadata (e.g. the agent home page).
metadata_uriNoFull override for the asset metadata URI (https or data:). Skips the built-in metadata builder.
x402_supportNoAdvertise x402 payment support in the registration document. Default false.
registrationsNoExternal registry registrations. Defaults to the chain registry entry, or the three.ws entry when threews_agent_id is set.
permanent_burnNoAttach PermanentBurnDelegate. Default false.
supported_trustNoTrust models the agent supports. Default ['reputation'] (Genesis style).
permanent_freezeNoAttach PermanentFreezeDelegate (unfrozen). Default false.
registration_uriNoFull override for the Agent Identity registration URI (https or data:). Skips the built-in registration builder.
royalty_creatorsNoRoyalty split. Percentages must sum to 100. Defaults to the signing wallet at 100%.
threews_agent_idNothree.ws agent UUID. Adds the Genesis-exact registration entry {agentId, agentRegistry: "https://three.ws"}.
verified_creatorNoAttach the VerifiedCreators plugin with the signing wallet verified. Default true (Genesis style).
immutable_metadataNoAttach the ImmutableMetadata plugin so the metadata can never change. Default true (Genesis style).
permanent_transferNoAttach PermanentTransferDelegate. Default false.
metadata_attributesNoOff-chain attributes array inside the asset metadata JSON (trait_type/value pairs).
royalty_basis_pointsNoRoyalty in basis points. Default 500 (5%), the Genesis value. 0 removes the Royalties plugin.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations already marking this as non-read-only and destructive, the description adds substantial behavioral detail: atomic transaction with a create-then-register fallback (Genesis-333), signing via SOLANA_SECRET_KEY or per-call secret, ~0.007 SOL costs plus a fee funding $THREE buybacks, the fee riding in the same transaction so a failed mint pays nothing, and confirm:true gating the broadcast. It also names the wallet-user alternative.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph with six sentences, each covering a different aspect (purpose, execution, signing/costs, fee safety, preview behavior, alternative). It is efficient for the tool's complexity, but bullet points or short sections would improve scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 28 parameters and no output schema, the description covers execution strategy, costs, fee behavior, preview contents, and an alternative tool. The main gap is that it does not describe what is returned when confirm:true is set (e.g., transaction signature or mint address), which would significantly improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description reinforces the confirm:true preview/broadcast behavior but does not add meaning beyond the schema's own parameter descriptions, and it does not clarify interactions among the 28 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it deploys an AI agent on-chain by minting a Metaplex Core asset and registering its EIP-8004 identity, with specifics like Genesis-333 style and a built-in wallet. It uses a precise verb+resource structure and distinguishes itself from siblings by describing the full mint+register flow and by explicitly sending Phantom/Solflare users to prepare_agent_mint.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides an explicit alternative for Phantom/Solflare users ('use prepare_agent_mint') and implies the primary use case of direct server-side signing via SOLANA_SECRET_KEY. However, it does not explicitly differentiate from register_agent_identity or build_registration for workflows that need only part of the process, so it is not fully exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_agent_mintPrepare an agent mint for a Phantom/Solflare wallet to signA
Read-only

Build the exact Genesis-style mint+register flow (Metaplex Core asset + Agent Identity) for an EXTERNAL Solana wallet: Phantom, Solflare, Backpack, Ledger, anything. Needs no secret key. Returns unsigned transactions base64 in txs_base64 (already co-signed by the new asset keypair) with wallet as the fee payer: one atomic tx when it fits Solana's size limit, else create + register to sign together via signAllTransactions. The wallet signs and broadcasts, or hands the signed array to send_signed_transaction. Includes the same mainnet deploy fee as mint_onchain_agent, priced against the wallet's live $THREE balance and returned as deploy_fee_sol/deploy_fee_to before anything is signed. Broadcasts nothing itself. The blockhash expires after roughly a minute, so sign promptly and re-prepare if a wallet reports an expired transaction.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesAgent name. Becomes the Core asset name and the registration name.
imageNoThumbnail/avatar image URL (PNG or similar). Shown on metaplex.com/agents, wallets, and explorers.
ownerNoMint the asset to this owner instead of the signing wallet.
activeNoRegistration active flag. Default true.
walletYesThe base58 address of the wallet that will sign, pay, and own the agent.
networkNoSolana cluster. Defaults to the configured network (mainnet unless overridden).
servicesNoServices the agent offers, listed on its Metaplex agent page ({name, endpoint}).
model_urlNo3D model URL (GLB). Written as the asset metadata animation_url and as model.uri in the registration, Genesis style.
attributesNoOn-chain Attributes plugin entries (real bytes in the asset account).
collectionNoMint into this Metaplex Core collection. The signer must be the collection authority.
add_blockerNoAttach AddBlocker so no further plugins can be added. Default false.
descriptionNoWhat this agent is or does. Stored in the EIP-8004 registration document.
external_urlNoOptional external_url in the asset metadata (e.g. the agent home page).
metadata_uriNoFull override for the asset metadata URI (https or data:). Skips the built-in metadata builder.
x402_supportNoAdvertise x402 payment support in the registration document. Default false.
registrationsNoExternal registry registrations. Defaults to the chain registry entry, or the three.ws entry when threews_agent_id is set.
permanent_burnNoAttach PermanentBurnDelegate. Default false.
supported_trustNoTrust models the agent supports. Default ['reputation'] (Genesis style).
permanent_freezeNoAttach PermanentFreezeDelegate (unfrozen). Default false.
registration_uriNoFull override for the Agent Identity registration URI (https or data:). Skips the built-in registration builder.
royalty_creatorsNoRoyalty split. Percentages must sum to 100. Defaults to the signing wallet at 100%.
threews_agent_idNothree.ws agent UUID. Adds the Genesis-exact registration entry {agentId, agentRegistry: "https://three.ws"}.
verified_creatorNoAttach the VerifiedCreators plugin with the signing wallet verified. Default true (Genesis style).
immutable_metadataNoAttach the ImmutableMetadata plugin so the metadata can never change. Default true (Genesis style).
permanent_transferNoAttach PermanentTransferDelegate. Default false.
metadata_attributesNoOff-chain attributes array inside the asset metadata JSON (trait_type/value pairs).
royalty_basis_pointsNoRoyalty in basis points. Default 500 (5%), the Genesis value. 0 removes the Royalties plugin.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reveals key externally observable behaviors: no broadcast is performed, the result is co-signed by a new asset keypair, the wallet is the fee payer, blockhash expiry imposes a signing-time constraint, and fee pricing uses the wallet's live balance. This substantially enriches the tool annotations, and there is no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is packed with useful operational details, including transaction splitting, fee quoting, no broadcast, and expiry caveats, and yet remains easily readable. It is longer than a single sentence, but every clause serves to guide correct use and proper next steps.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the high complexity, lack of an output schema, and a large input schema, the description covers a lot of the needed context: output fields, fee payer, fee response fields, signing limitations, and atomicity boundary. It leaves minor ambiguity around the exact type and structure of txs_base64, but takes the tool reasonably close to being self-explanatory.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% per-parameter description coverage across all 27 parameters, so the tool description does not need to explain every field. It adds a little meaningful context by describing how wallet is used as signer and fee payer, but this is only a small supplement to the already-complete schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and bounded purpose: building unsigned Genesis-style mint and registration transactions for an external Solana wallet, with no secret key required. It names the output fields and distinguishes itself from the sibling tools like mint_onchain_agent and send_signed_transaction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly declares the intended context: external wallets (Phantom, Solflare, etc.), no secret key needed, and a defined handoff to send_signed_transaction after signing. It does not explicitly contrast conditions like 'use mint_onchain_agent when you have a secret key', so the alternative recommendation remains partially implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

register_agent_identityRegister an existing Core asset in the Metaplex Agent RegistryA
DestructiveIdempotent

Give an ALREADY-MINTED Metaplex Core asset its Agent Identity: writes the EIP-8004 registration document (as a self-contained data: URI) onto the asset and creates its identity PDA, after which it appears on metaplex.com/agents. The signing wallet must be the asset authority (or the collection authority for collection-bound assets). Registration is one-time per asset and costs ~0.003 SOL; an already-registered asset returns already_registered without spending. Without confirm:true it returns a spend-nothing preview. To mint a NEW agent, use mint_onchain_agent or prepare_agent_mint instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesAgent name for the registration document.
assetYesThe Core asset address to register.
imageNoThumbnail image URL.
activeNoRegistration active flag. Default true.
secretNoPer-call signing key. Overrides SOLANA_SECRET_KEY.
confirmNoMust be true to broadcast. Anything else returns a preview.
networkNoCluster. Defaults to the configured network.
servicesNoServices the agent offers.
model_urlNo3D model URL (GLB), written as model.uri.
collectionNoThe collection address, required for collection-bound assets.
descriptionNoAgent description.
x402_supportNoAdvertise x402 payment support. Default false.
registrationsNoExternal registry entries. Defaults to the chain registry entry.
supported_trustNoDefault ['reputation'].
registration_uriNoFull override for the registration URI (https or data:).
threews_agent_idNothree.ws agent UUID for the Genesis-exact three.ws registration entry.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though annotations already capture read-only/write/destructive/idempotent traits, the description adds substantial behavioral context: exact side effects (writing the EIP-8004 document, creating the identity PDA), cost, one-time registration semantics, and the already_registered error/handling behavior. It strikes at the right level beyond the annotation flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the main action, then covers prerequisites, costs, idempotence, preview behavior, and alternatives. Every clause adds meaningful information without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having 16 parameters and no output schema, the description covers the essential operational context: what the tool writes, when it is usable, what happens in failure, what confirm controls, what it costs, and what related tools do. The full suite of parameters is sufficiently documented through the schema, so the description does not need to repeat them.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter has field-level descriptions, so the baseline is 3. The description adds useful context around confirm:true previews and authority requirements for collection-bound assets, but it does not materially supplement the parameter semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies an exact verb and resource: 'Give an ALREADY-MINTED Metaplex Core asset its Agent Identity.' It distinguishes itself from siblings by explicitly directing new-agent work to mint_onchain_agent or prepare_agent_mint, making the tool's purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states when to use this tool (registering existing assets), what prerequisites are required (asset authority or collection authority), and what not to use it for ('To mint a NEW agent...'). It also includes hands-on operational guidance about confirm:true and confirmation requirements.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_signed_transactionBroadcast signed Solana transactions in order and confirm themA
Destructive

Broadcast one or more fully signed Solana transactions (base64) IN ORDER, polling each to confirmation before the next. Use it to complete the prepare_agent_mint flow: pass the wallet-signed txs_base64 array and the create/register sequencing (including the propagation race) is handled. Whatever the transactions do on-chain happens for real, so only send bytes you built and inspected.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoCluster to broadcast on. Defaults to the configured network.
tx_base64NoA single fully signed transaction, base64 encoded.
txs_base64NoFully signed transactions to broadcast in order (e.g. create then register).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as destructive and non-read-only, and the description adds meaningful behavior: sequential broadcasting with polling before each next transaction, handling of the propagation race, and an explicit warning that on-chain effects are real. It does not cover failure-handling behavior, but the annotations lower the burden and the added context is valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core action and object. Each sentence earns its place: one for mechanics, one for workflow integration, one for the safety warning. There is no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive broadcasting tool with no output schema, the description covers purpose, ordering, confirmation polling, workflow integration, and risk. It does not specify failure behavior or response shape, but the schema and annotations provide enough surrounding structure that this is not a critical gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already defines network, tx_base64, and txs_base64 clearly. The description adds some context by tying txs_base64 to the wallet-signed prepare_agent_mint array and to create/register sequencing, but it does not add substantial meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific action ('Broadcast') with a clear resource ('fully signed Solana transactions (base64)') and a distinctive behavior ('IN ORDER, polling each to confirmation before the next'). It also situates the tool within the prepare_agent_mint flow, distinguishing it from sibling tools that build or register rather than broadcast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use the tool to complete the prepare_agent_mint flow and instructs the user to pass the wallet-signed txs_base64 array. It gives clear context but does not explicitly state when not to use it or name an alternative tool, though the flow integration implies the surrounding steps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

three_statusDeploy fee, $THREE holder tier, and the live buyback ledgerA
Read-only

What the next on-chain deploy costs and why. Returns the deploy-fee schedule (a flat SOL fee on mainnet, free on devnet), the live $THREE balance of a wallet and the tier it earns (half price, then free), the wallet the fee is paid to, and the live $THREE market + buyback figures from the public three.ws ledger. Pass wallet to price a specific payer, or omit it to price the configured signer. Read-only: it moves nothing and needs no key.

ParametersJSON Schema
NameRequiredDescriptionDefault
walletNoPrice the deploy fee for this wallet. Defaults to the configured signer.
networkNoCluster. Defaults to the configured network. Devnet deploys are always free.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=true, and the description reinforces these by stating 'Read-only: it moves nothing and needs no key.' It also adds useful context: the data comes from the public three.ws ledger and includes live market/buyback figures, which is beyond what annotations alone provide. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences and front-loaded with a clear headline. It enumerates outputs compactly and provides usage instructions without redundancy. Every sentence earns its place, and the construct is easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (returns multiple distinct data points) and lack of output schema, the description sufficiently explains what will be returned: fee schedule, balance, tier, wallet, and market/buyback figures. It also covers parameter behavior and read-only nature, making it complete for an agent to decide when and how to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: both wallet and network have descriptive strings, including defaults and behavior (devnet always free). The description reiterates the wallet default and adds the 'omit it' wording, but this is already in the schema. Since the schema fully documents parameters, the description adds minimal value beyond what structured data already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear purpose: it tells what the next on-chain deploy costs and why, listing specific outputs (deploy-fee schedule, $THREE balance, tier, wallet, market/buyback figures). This clearly distinguishes it from sibling tools like get_onchain_agent or send_signed_transaction, which focus on different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: it explains how to pass a wallet to price a specific payer or omit it to use the configured signer. It also states it is read-only and needs no key, implying it is for inquiry before deployment. However, it does not explicitly mention when to use this over siblings or when not to use it, so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updatesv0.2.0
    • First observedagent_wallet
    • First observedbuild_registration
    • First observedget_onchain_agent
    • First observedlist_onchain_agents
    • First observedmint_onchain_agent
    • First observedprepare_agent_mint
    • First observedregister_agent_identity
    • First observedsend_signed_transaction
    • First observedthree_status

TDQS

A4.4/5.0
Disambiguation5/5

Each tool targets a distinct stage in the agent-minting and registration workflow: registration of an existing asset, internal mint+record, external wallet preparation, transaction broadcasting, reading one agent, listing agents, building registration documents, wallet checks, and deployment status. The descriptions cross-reference and explicitly separate the flows, so an agent can disambiguate them reliably.

Naming Consistency4/5

The majority of tools follow a clear verb_noun pattern (register_agent_identity, mint_onchain_agent, get_onchain_agent, list_onchain_agents). Two exceptions, agent_wallet and three_status, are noun-phrase commands, but the overall style is still predictable and readable.

Tool Count5/5

Nine tools is a well-scoped set for a Metaplex agent-minting server. Each tool earns its place, covering the full user journey without redundancy or bloat.

Completeness5/5

The surface covers both mint+register flows, external wallet signing, preview/document building, direct broadcast, querying a specific agent, listing latest agents, wallet balances, and fee/deployment status. Since agent registration is one-time and immutable, the missing operational surface is not relevant to the domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides permissionless wallet infrastructure for AI agents to manage wallets, sign transactions, and handle tokens across Solana and all EVM-compatible chains. It includes 29 specialized tools for on-chain operations, featuring built-in security guards and automated x402 payment processing without KYC requirements.
    29
    402
    3
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to read chain data, execute transactions, swap tokens, and manage wallets on Solana through 38 tools across 7 modules. Supports write operations with a private key and includes built-in prompts for common workflows.
    38
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nirholas/metaplex-agent-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server