@three-ws/metaplex-agent-mcp
@three-ws/metaplex-agent-mcp
모든 MCP 클라이언트에서 Solana의 Metaplex Agent Registry 에 AI 에이전트를 온체인으로 배포하세요.
하나의 흐름이 Metaplex Core 자산을 발행하고 EIP-8004 에이전트 신원을 등록합니다(Solana의 1232바이트 제한에 맞으면 단일 원자 트랜잭션, 그렇지 않으면 생성 + 등록을 순차적으로 수행하며, 이는 Genesis 333이 배포된 방식과 정확히 동일합니다). 따라서 에이전트는 자체 내장 지갑, 평판 표면, 탐색기 페이지와 함께 metaplex.com/agents에 표시됩니다. 기본 출력은 three.ws Genesis 333 발행의 정확한 형태를 재현하며, 라이브 자산과 바이트 단위로 검증됩니다:
자체 포함된
data:application/json;base64URI(name,image,animation_urlGLB) 형태의 자산 메타데이터Royalties 플러그인(소유자에게 5%), VerifiedCreators(서명 지갑), ImmutableMetadata
eip-8004#registration-v1문서(model.uri,active,x402Support,registrations,supportedTrust)를 담은 AgentIdentity 플러그인
두 가지 서명 경로, 모두 자가 보관 방식:
에이전트는 자체 키페어(
SOLANA_SECRET_KEY)로 서명합니다:mint_onchain_agent.사람은 Phantom, Solflare, Backpack, Ledger 또는 모든 Solana 지갑으로 서명합니다:
prepare_agent_mint가 트랜잭션을 구성하고, 지갑이 서명하며,send_signed_transaction이 브로드캐스트합니다. 어떤 키도 서버에 닿지 않습니다.
아무것도 모의가 아닙니다: 실제 Metaplex 프로그램, 실제 Solana, 그리고 무료 엔드투엔드 리허설을 위한 devnet 지원.
설치
npm install -g @three-ws/metaplex-agent-mcp
# or run ad hoc
npx -y @three-ws/metaplex-agent-mcpRelated MCP server: AgentWallet MCP Server
설정
Claude Code:
claude mcp add metaplex-agent -e SOLANA_SECRET_KEY=<base58> -- npx -y @three-ws/metaplex-agent-mcpCursor / 모든 MCP 클라이언트(mcp.json):
{
"mcpServers": {
"metaplex-agent": {
"command": "npx",
"args": ["-y", "@three-ws/metaplex-agent-mcp"],
"env": { "SOLANA_SECRET_KEY": "<base58 secret key>" }
}
}
}SOLANA_SECRET_KEY는 선택 사항입니다: 모든 읽기 도구와 Phantom/Solflare 흐름 전체가 이 키 없이 작동합니다.
빠른 시작
devnet에서 무료로 리허설한 후 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" }발행 비용은 mainnet에서 ~0.007 SOL입니다(Core 임대료 + 신원 PDA 임대료 + 수수료).
도구
도구 | 기능 |
| 발행 + 등록, 키로 서명(맞으면 원자적, 그렇지 않으면 자동 분할). |
| 외부 지갑( |
| 지갑 서명 트랜잭션을 순서대로 브로드캐스트하고, 각각을 확인까지 폴링하며 생성/등록 전파 경쟁을 흡수합니다. |
| 이미 발행된 Core 자산을 Agent Registry에 등록합니다(멱등적이며, 서명자는 자산 권한자여야 합니다). |
| 등록된 모든 에이전트 읽기: 자산, 플러그인, 디코딩된 메타데이터 + 등록 문서, 신원 PDA, 내장 지갑 + 잔액. |
| 자산의 내장 지갑(mpl-core Asset Signer PDA), 모든 주소 또는 구성된 서명자, 실시간 SOL 잔액 포함. |
| EIP-8004 등록 JSON + |
| 라이브 three.ws |
사용자 지정
발행이 다루는 모든 필드는 매개변수입니다: 소유자, 컬렉션, 로열티 기준 포인트 및 분할, 검증된 크리에이터, 불변 메타데이터, 온체인 Attributes, 영구 동결/전송/소각 위임, AddBlocker, 오프체인 메타데이터 속성, external_url, 서비스, 신뢰 모델, 등록 항목, 그리고 직접 호스팅하는 문서에 대한 전체 metadata_uri / registration_uri 재정의. 기본값은 Genesis 333 값이므로 name, description, image, model_url만으로 호출하면 원본과 형태가 구분되지 않는 자산이 생성됩니다.
안전
mint_onchain_agent및register_agent_identity는 오직confirm: true로만 브로드캐스트합니다(REQUIRE_CONFIRM=false로 옵트아웃 가능); 미리보기는 비용이 들지 않습니다.키는 사용자 소유로 유지됩니다:
SOLANA_SECRET_KEY또는 호출별secret, 절대 수탁 지갑이 아닙니다. 지갑 경로는 키가 전혀 필요 없습니다.지출 전에 잔액을 확인하고, RPC 엔드포인트는 HTTPS여야 하며, devnet은 리허설을 위한 일급 대상입니다.
환경 변수
변수 | 기본값 | 의미 |
| 설정 안 됨 | 발행 지갑의 Base58 비밀 키 또는 JSON 바이트 배열. |
| 공개 엔드포인트 | HTTPS RPC. 프로덕션 트래픽에는 자체 RPC를 사용하세요. |
|
| 기본 클러스터( |
|
| 지출을 |
|
| 배포 피드의 호스트. |
라이브러리 사용
빌더는 직접 임베딩(웹 앱, 스크립트)을 위해 내보내집니다:
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 });등록 및 메타데이터 빌더는 @three-ws/metaplex-agent-mcp/lib/registration에서 독립적으로 가져올 수 있으며(의존성 없음, 브라우저 안전), 트랜잭션 빌더는 @three-ws/metaplex-agent-mcp/lib/mint에서 가져올 수 있습니다. three.ws /deploy-onchain 페이지는 정확히 이 빌더들로 실행됩니다.
요구 사항
Node 20+
발행을 위한 대상 네트워크의 SOL(mainnet에서 에이전트당 ~0.007 SOL; devnet은 faucet을 통해 무료)
링크
three.ws: https://three.ws
라이브 배포 피드: https://three.ws/deployments
Metaplex Agent Registry: https://www.metaplex.com/agents
Metaplex 문서: https://www.metaplex.com/docs/agents
소스: https://github.com/nirholas/three.ws/tree/main/packages/metaplex-agent-mcp
이 저장소 정보
이것은 @three-ws/metaplex-agent-mcp의 독립형 홈입니다. 개발은 three.ws 모노레포에서 이루어지며 릴리스는 여기에 미러링되므로, 이 저장소는 항상 npm 및 공식 MCP 레지스트리(io.github.nirholas/metaplex-agent)에 게시된 것과 일치합니다. 이슈와 PR은 두 곳 모두에서 환영합니다.
Available Tools
9 toolsagent_walletAn agent's built-in wallet, or the signer wallet, with balanceARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| asset | No | A Core asset address: derives that agent's built-in wallet. | |
| address | No | A wallet address to inspect verbatim. | |
| network | No | Cluster. Defaults to the configured network. |
TDQS
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.
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.
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.
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.
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.
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)ARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Agent name. | |
| asset | No | Asset address for the default chain-registry entry when no registrations are given. | |
| image | No | Thumbnail image URL. | |
| active | No | Registration active flag. Default true. | |
| network | No | Network for the default chain-registry entry. Defaults to the configured network. | |
| services | No | Services the agent offers. | |
| model_url | No | 3D model URL (GLB), written as model.uri. | |
| description | No | Agent description. | |
| x402_support | No | Advertise x402 payment support. Default false. | |
| registrations | No | External registry entries. | |
| supported_trust | No | Default ['reputation']. | |
| threews_agent_id | No | three.ws agent UUID for the Genesis-exact three.ws entry. |
TDQS
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.
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.
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.
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.
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.
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)ARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| asset | Yes | The Core asset address (base58). | |
| network | No | Cluster. Defaults to the configured network. |
TDQS
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.
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.
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.
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.
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.
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 registrationsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many registrations to return. Default 12. | |
| cursor | No | Pagination cursor from a previous call. | |
| network | No | Solana cluster. Defaults to the configured network. | |
| all_chains | No | Include EVM ERC-8004 registrations too. Default false (Solana only). |
TDQS
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.
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.
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.
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.
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.
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 RegistryADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Agent name. Becomes the Core asset name and the registration name. | |
| image | No | Thumbnail/avatar image URL (PNG or similar). Shown on metaplex.com/agents, wallets, and explorers. | |
| owner | No | Mint the asset to this owner instead of the signing wallet. | |
| active | No | Registration active flag. Default true. | |
| secret | No | Per-call signing key (base58 secret key or JSON byte array). Overrides SOLANA_SECRET_KEY. | |
| confirm | No | Must be true to broadcast. Anything else returns a spend-nothing preview. | |
| network | No | Solana cluster. Defaults to the configured network (mainnet unless overridden). | |
| services | No | Services the agent offers, listed on its Metaplex agent page ({name, endpoint}). | |
| model_url | No | 3D model URL (GLB). Written as the asset metadata animation_url and as model.uri in the registration, Genesis style. | |
| attributes | No | On-chain Attributes plugin entries (real bytes in the asset account). | |
| collection | No | Mint into this Metaplex Core collection. The signer must be the collection authority. | |
| add_blocker | No | Attach AddBlocker so no further plugins can be added. Default false. | |
| description | No | What this agent is or does. Stored in the EIP-8004 registration document. | |
| external_url | No | Optional external_url in the asset metadata (e.g. the agent home page). | |
| metadata_uri | No | Full override for the asset metadata URI (https or data:). Skips the built-in metadata builder. | |
| x402_support | No | Advertise x402 payment support in the registration document. Default false. | |
| registrations | No | External registry registrations. Defaults to the chain registry entry, or the three.ws entry when threews_agent_id is set. | |
| permanent_burn | No | Attach PermanentBurnDelegate. Default false. | |
| supported_trust | No | Trust models the agent supports. Default ['reputation'] (Genesis style). | |
| permanent_freeze | No | Attach PermanentFreezeDelegate (unfrozen). Default false. | |
| registration_uri | No | Full override for the Agent Identity registration URI (https or data:). Skips the built-in registration builder. | |
| royalty_creators | No | Royalty split. Percentages must sum to 100. Defaults to the signing wallet at 100%. | |
| threews_agent_id | No | three.ws agent UUID. Adds the Genesis-exact registration entry {agentId, agentRegistry: "https://three.ws"}. | |
| verified_creator | No | Attach the VerifiedCreators plugin with the signing wallet verified. Default true (Genesis style). | |
| immutable_metadata | No | Attach the ImmutableMetadata plugin so the metadata can never change. Default true (Genesis style). | |
| permanent_transfer | No | Attach PermanentTransferDelegate. Default false. | |
| metadata_attributes | No | Off-chain attributes array inside the asset metadata JSON (trait_type/value pairs). | |
| royalty_basis_points | No | Royalty in basis points. Default 500 (5%), the Genesis value. 0 removes the Royalties plugin. |
TDQS
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.
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.
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.
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.
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.
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 signARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Agent name. Becomes the Core asset name and the registration name. | |
| image | No | Thumbnail/avatar image URL (PNG or similar). Shown on metaplex.com/agents, wallets, and explorers. | |
| owner | No | Mint the asset to this owner instead of the signing wallet. | |
| active | No | Registration active flag. Default true. | |
| wallet | Yes | The base58 address of the wallet that will sign, pay, and own the agent. | |
| network | No | Solana cluster. Defaults to the configured network (mainnet unless overridden). | |
| services | No | Services the agent offers, listed on its Metaplex agent page ({name, endpoint}). | |
| model_url | No | 3D model URL (GLB). Written as the asset metadata animation_url and as model.uri in the registration, Genesis style. | |
| attributes | No | On-chain Attributes plugin entries (real bytes in the asset account). | |
| collection | No | Mint into this Metaplex Core collection. The signer must be the collection authority. | |
| add_blocker | No | Attach AddBlocker so no further plugins can be added. Default false. | |
| description | No | What this agent is or does. Stored in the EIP-8004 registration document. | |
| external_url | No | Optional external_url in the asset metadata (e.g. the agent home page). | |
| metadata_uri | No | Full override for the asset metadata URI (https or data:). Skips the built-in metadata builder. | |
| x402_support | No | Advertise x402 payment support in the registration document. Default false. | |
| registrations | No | External registry registrations. Defaults to the chain registry entry, or the three.ws entry when threews_agent_id is set. | |
| permanent_burn | No | Attach PermanentBurnDelegate. Default false. | |
| supported_trust | No | Trust models the agent supports. Default ['reputation'] (Genesis style). | |
| permanent_freeze | No | Attach PermanentFreezeDelegate (unfrozen). Default false. | |
| registration_uri | No | Full override for the Agent Identity registration URI (https or data:). Skips the built-in registration builder. | |
| royalty_creators | No | Royalty split. Percentages must sum to 100. Defaults to the signing wallet at 100%. | |
| threews_agent_id | No | three.ws agent UUID. Adds the Genesis-exact registration entry {agentId, agentRegistry: "https://three.ws"}. | |
| verified_creator | No | Attach the VerifiedCreators plugin with the signing wallet verified. Default true (Genesis style). | |
| immutable_metadata | No | Attach the ImmutableMetadata plugin so the metadata can never change. Default true (Genesis style). | |
| permanent_transfer | No | Attach PermanentTransferDelegate. Default false. | |
| metadata_attributes | No | Off-chain attributes array inside the asset metadata JSON (trait_type/value pairs). | |
| royalty_basis_points | No | Royalty in basis points. Default 500 (5%), the Genesis value. 0 removes the Royalties plugin. |
TDQS
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.
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.
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.
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.
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.
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 RegistryADestructiveIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Agent name for the registration document. | |
| asset | Yes | The Core asset address to register. | |
| image | No | Thumbnail image URL. | |
| active | No | Registration active flag. Default true. | |
| secret | No | Per-call signing key. Overrides SOLANA_SECRET_KEY. | |
| confirm | No | Must be true to broadcast. Anything else returns a preview. | |
| network | No | Cluster. Defaults to the configured network. | |
| services | No | Services the agent offers. | |
| model_url | No | 3D model URL (GLB), written as model.uri. | |
| collection | No | The collection address, required for collection-bound assets. | |
| description | No | Agent description. | |
| x402_support | No | Advertise x402 payment support. Default false. | |
| registrations | No | External registry entries. Defaults to the chain registry entry. | |
| supported_trust | No | Default ['reputation']. | |
| registration_uri | No | Full override for the registration URI (https or data:). | |
| threews_agent_id | No | three.ws agent UUID for the Genesis-exact three.ws registration entry. |
TDQS
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.
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.
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.
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.
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.
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 themADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Cluster to broadcast on. Defaults to the configured network. | |
| tx_base64 | No | A single fully signed transaction, base64 encoded. | |
| txs_base64 | No | Fully signed transactions to broadcast in order (e.g. create then register). |
TDQS
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.
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.
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.
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.
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.
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 ledgerARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet | No | Price the deploy fee for this wallet. Defaults to the configured signer. | |
| network | No | Cluster. Defaults to the configured network. Devnet deploys are always free. |
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
v0.2.0- First observed
agent_wallet - First observed
build_registration - First observed
get_onchain_agent - First observed
list_onchain_agents - First observed
mint_onchain_agent - First observed
prepare_agent_mint - First observed
register_agent_identity - First observed
send_signed_transaction - First observed
three_status
TDQS
Scored across 9 tools
Each tool targets a distinct action or resource: registering existing assets, minting new agents, preparing unsigned transactions for external wallets, broadcasting signed transactions, fetching individual agents, listing agents, building registration documents, checking wallets, and checking deploy status. Overlapping flows like mint_onchain_agent and prepare_agent_mint are clearly separated by internal vs external signing.
Most tools follow a clear verb_noun pattern: register_agent_identity, mint_onchain_agent, prepare_agent_mint, get_onchain_agent, list_onchain_agents, build_registration. Two tools, agent_wallet and three_status, are noun-phrase names rather than verb-first, but the naming style is otherwise consistent and readable.
Nine tools is well within the ideal range and each tool earns its place in the set. The count covers both execution paths and read-only helpers without feeling padded or overwhelming.
The set covers the full intended workflow: mint and register agents internally, prepare external wallet deployments, register already-minted assets, inspect and list agents, build registration documents, check wallet balances, and understand fees. Since registration is explicitly one-time and metadata is immutable, update/delete operations are not meaningful gaps.
Maintenance
Related MCP Connectors
The cloud for agents. Tools for AI agents to register, build, and deploy other agents. Zero human required.
Native Solana staking for AI agents. 26 MCP tools, one-shot signing, webhooks.
On-chain ERC-8004 agent registry. Search, register, and check reputation across 16 chains.
Build, validate, and deploy multi-agent AI solutions from any AI environment.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables AI agents to interact with cryptocurrency ecosystems through wallet management, trading operations (swaps, DCA, limit orders), staking, and multi-chain support starting with Solana.37GPL 3.0
- AlicenseBqualityAmaintenanceProvides 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.40393 npm3MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with the Solana blockchain, manage accounts and tokens, and develop and deploy smart contracts end-to-end.4-
- AlicenseAqualityCmaintenanceFundraising infrastructure for AI agents on Solana: register agents, create milestone-escrowed campaigns, and donate via the x402 pay-to-call flow. Backed by Anchor programs (agent_registry, escrow, reputation) with on-chain reputation for every verified action.92 npm5MIT