Skip to main content
Glama
ORDNET

ORDnet MCP Server

Official
by ORDNET

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PORTNoHTTP port (default 3000).3000
TRANSPORTNoTransport mode: stdio (default) or http.stdio
ORDNET_WIFNoWallet private key (WIF). On HTTP transport this is the ONLY way to load a wallet.
ORDNET_UTXO_URLNoBase URL of the ordnet-utxo index.http://127.0.0.1:7002
ORDNET_MCP_AUTH_TOKENNoBearer token (min. 32 chars). Required when TRANSPORT=http. Server refuses to start without it in HTTP mode. Generate with `openssl rand -hex 32`.
ORDNET_POLICY_MAX_SATS_PER_TXNoOperator hard ceiling per transaction. Recommended on HTTP transport.
ORDNET_POLICY_MAX_SATS_PER_SESSIONNoOperator hard ceiling per server session. Recommended on HTTP transport.

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": true
}
resources
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
ordnet_wallet_initA

Initialize wallet from WIF private key for blockchain operations.

This is the first step before creating inscriptions. The wallet will be used for:

  • Creating and signing inscription transactions

  • Paying service fees (396 sats across 11 outputs / 10 addresses)

  • Receiving change from transactions

Security: WIF is held in memory only, not persisted. Use ordnet_wallet_init_env for production.

Args:

  • wif (string): WIF private key (starts with 5, K, or L, 51-52 chars)

Returns: { address: string, publicKey: string, balanceSatoshis: number }

Example: ordnet_wallet_init({ wif: "L1a2b3c4d5..." }) → Wallet initialized at 1ABC...

ordnet_wallet_init_envA

Initialize wallet from environment variable (highest security tier).

Reads WIF from environment variable instead of passing it directly. Recommended for production use.

Args:

  • envVarName (string): Environment variable name (default: ORDNET_WIF)

Returns: { address: string, balanceSatoshis: number }

Example: export ORDNET_WIF="L1a2b3c4..." ordnet_wallet_init_env({}) → Wallet initialized

ordnet_wallet_statusA

Check current wallet initialization status and balance.

Returns wallet address and balance if initialized.

Returns: { initialized: boolean, address?: string, balanceSatoshis?: number }

ordnet_wallet_balanceA

Get balance for any BSV address.

Args:

  • address (string, optional): BSV address. Uses wallet address if not provided.

Returns: { address: string, confirmed: number, unconfirmed: number, total: number }

ordnet_wallet_utxosA

Get unspent transaction outputs (UTXOs) for an address.

Args:

  • address (string, optional): BSV address. Uses wallet address if not provided.

  • limit (number): Maximum UTXOs to return (default: 5)

Returns: { utxos: [{ txid, vout, satoshis }], count: number }

ordnet_wallet_clearA

Clear wallet from memory. Use when done with operations.

Returns: { cleared: true }

ordnet_fee_estimateA

Calculate fee estimate for an inscription.

Service fees breakdown (per ordmail-v10-standalone-026.html):

  • ordiBuilder / onnoBuilder / algoBuilder / colleagueI: 11 sats each

  • protocol / colleagueD: 22 sats each

  • monitor: 33 sats, indexer: 44 sats, partner: 66 sats

  • founder: 77 sats, foundation: 88 sats

  • Total: 396 sats across 10 distinct addresses

Args:

  • contentSize (number): Size of content in bytes

  • feePerByte (number): Fee per byte (default: 0.15 = 150 sats/KB, miner fee floor 200 sats)

Returns: { estimatedTxSize, minerFee, serviceFee, totalCost, breakdown }

ordnet_inscribe_prepareA

Prepare an inscription transaction without broadcasting.

Creates a signed transaction ready for broadcast. Returns the raw hex and fee breakdown for review before broadcasting.

Args:

  • content (string): Content to inscribe (HTML, text, JSON, etc.)

  • contentType (string): MIME type (default: text/html;charset=utf8)

  • feePerByte (number): Fee per byte (default: 0.2)

Returns: { rawHex, txid, feeEstimate, inscriptionId }

Requires: Wallet must be initialized first.

ordnet_inscribe_broadcastA

Broadcast a prepared inscription transaction to the BSV network.

WARNING: This action is IRREVERSIBLE. The transaction will be permanently recorded on the blockchain.

Args:

  • rawHex (string): Raw transaction hex from ordnet_inscribe_prepare

Returns: { txid, inscriptionId, viewUrl, transactionUrl }

ordnet_inscribe_htmlA

Create and broadcast an HTML inscription in one step.

Convenience tool that prepares and broadcasts an HTML inscription.

Args:

  • content (string): HTML content to inscribe

  • feePerByte (number): Fee per byte (default: 0.2)

Returns: { txid, inscriptionId, viewUrl }

Requires: Wallet must be initialized.

ordnet_inscribe_jsonA

Create and broadcast a JSON inscription in one step.

Args:

  • content (string): JSON content to inscribe

  • feePerByte (number): Fee per byte (default: 0.2)

Returns: { txid, inscriptionId, viewUrl }

ordnet_inscribe_textA

Create and broadcast a plain text inscription in one step.

Args:

  • content (string): Text content to inscribe

  • feePerByte (number): Fee per byte (default: 0.2)

Returns: { txid, inscriptionId, viewUrl }

ordnet_domain_checkA

Check if a domain name is available for registration.

Args:

  • name (string): Domain name without extension (e.g., "myname")

  • extension (string): Domain extension (default: .sats)

Returns: { available: boolean, owner?: string, inscriptionId?: string }

ordnet_domain_infoA

Get detailed information about a domain.

Args:

  • fullName (string): Full domain name (e.g., "myname.sats")

Returns: { name, extension, owner, inscriptionId, genesisHeight, protocol }

ordnet_domain_searchA

Search for registered domains by name prefix.

Args:

  • query (string): Search query

  • limit (number): Maximum results (default: 20)

Returns: { domains: [{ name, owner, inscriptionId }], count }

ordnet_domain_registerA

Register a new SNS/OPNS domain on the blockchain.

Creates and broadcasts a domain registration inscription.

Args:

  • name (string): Domain name without extension

  • extension (string): Domain extension (default: .sats)

  • protocol (string): Registration protocol: sns or opns (default: sns)

  • feePerByte (number): Fee per byte (default: 0.2)

Returns: { txid, inscriptionId, domain }

Requires: Wallet must be initialized.

ordnet_domain_register_snsB

Quick registration of an SNS domain (.sats, .btc, etc).

Args:

  • name (string): Domain name without extension

  • extension (string): Extension (default: .sats)

  • feePerByte (number): Fee per byte (default: 0.2)

Returns: { txid, inscriptionId, domain }

ordnet_domain_register_opnsA

Quick registration of an OPNS domain.

Args:

  • name (string): Domain name without extension

  • extension (string): Extension (default: .sats)

  • feePerByte (number): Fee per byte (default: 0.2)

Returns: { txid, inscriptionId, domain }

ordnet_search_inscriptionsB

Search for inscriptions on the BSV blockchain.

Args:

  • query (string): Search query

  • contentType (string, optional): Filter by content type

  • limit (number): Maximum results (default: 20)

Returns: { inscriptions: [...], count }

ordnet_get_inscriptionA

Get detailed information about a specific inscription.

Args:

  • inscriptionId (string): Inscription ID (format: txid_outputIndex)

Returns: { inscriptionId, contentType, contentSize, owner, ... }

ordnet_get_content_urlA

Get the URL to view inscription content.

Args:

  • inscriptionId (string): Inscription ID

Returns: { inscriptionId, contentUrl, viewUrl, transactionUrl }

ordnet_validate_addressA

Validate a BSV address format.

Args:

  • address (string): BSV address to validate

Returns: { valid: boolean, address }

ordnet_security_encrypt_walletA

Encrypt a WIF private key with AES-256-GCM.

Use this to create an encrypted wallet that can be stored safely. The encrypted data can later be decrypted with ordnet_wallet_init with the password.

Args:

  • wif (string): WIF private key to encrypt

  • password (string): Strong password (min 12 chars)

Returns: { encrypted: { iv, data, tag, salt } }

ordnet_security_tierA

Check the current wallet security tier.

Tiers (highest to lowest):

  1. environment - WIF from environment variable

  2. encrypted - WIF from encrypted store

  3. plaintext - WIF provided directly (not recommended)

Returns: { tier, envVarSet, recommendation }

ordnet_security_validate_passwordA

Check if a password meets security requirements.

Requirements:

  • Minimum 12 characters

  • At least one uppercase letter

  • At least one lowercase letter

  • At least one number

  • At least one special character

Args:

  • password (string): Password to validate

Returns: { valid: boolean, errors: string[] }

ordnet_generate_walletA

Generate a new random BSV wallet.

WARNING: Store the WIF securely! It cannot be recovered if lost.

Returns: { wif, address }

ordnet_infoA

Get information about the ORDnet MCP server.

Returns server version, capabilities, and service fee information.

ordnet_content_typesA

Get list of all supported content types for inscriptions.

Returns: { contentTypes: [...] }

ordnet_tx_simulateA

Decode and inspect a raw transaction via ORDnet's OWN node WITHOUT broadcasting it.

Use this BEFORE ordnet_inscribe_broadcast to verify exactly what a transaction will do: destinations, amounts, and safety warnings (e.g. 1-satoshi outputs that are likely ordinals/inscriptions).

Args:

  • rawHex (string): Raw transaction hex to simulate

Returns: { txid, sizeBytes, outputCount, totalOutputSats, outputs[], warnings[] }

ordnet_policy_setA

Configure spend limits for this server session (agent safety layer).

When any limit is set, every broadcast is first simulated via ORDnet's own node and BLOCKED if it would exceed a limit (fail-closed). When no limits are set, broadcasts behave exactly as before.

Limits apply to the TOTAL output value of a transaction, including change back to the agent's own wallet (a conservative upper bound).

Args:

  • maxSatsPerTx (number|null, optional): Max output sats per transaction; null removes the limit

  • maxSatsPerSession (number|null, optional): Max cumulative output sats this session; null removes the limit

  • resetSession (boolean, optional): Reset the session spend counter

Returns: The active policy after applying changes.

ordnet_policy_statusA

Show the active spend policy and session totals.

Returns: { maxSatsPerTx, maxSatsPerSession, spentThisSession, broadcastCount }

ordnet_index_healthA

Check the health and sync status of ORDnet's own address/UTXO index (ordnet-utxo).

This index is the PRIMARY source for balance and UTXO lookups since v2.5 — every UTXO in it has been individually verified by ORDnet's own BSV node. WhatsOnChain is only used as a connectivity fallback.

Returns: { status, index_height, node_height, in_sync }

ordnet_address_watchA

Register a BSV address in ORDnet's own UTXO index watchlist.

The index seeds the address immediately (WhatsOnChain as outpoint hint, every UTXO verified by ORDnet's own node) and then tracks it in real time via the tip-follower. Unknown addresses are also auto-registered on their first balance/UTXO query; this tool lets an agent pre-register addresses so that first query is instant.

Args:

  • address (string): BSV address to watch

  • label (string, optional): label for the watchlist entry (default: "mcp")

Returns: Watchlist registration result from the index.

ordnet_sendA

Send a plain BSV payment (P2PKH) from the initialized wallet.

THE core tool for agent payments: miner fee only (0.15 sat/byte, min 200 sats), NO service fees — micropayments stay lean. Optional OP_RETURN data lets you attach a payment reference (e.g. an x402 invoice ID).

Safety: spend policy (ordnet_policy_status) is enforced; 1-sat ordinal UTXOs are never used as funding.

Args:

  • to (string): recipient BSV address

  • satoshis (number): amount in satoshis

  • opReturn (string, optional): OP_RETURN payload / payment reference

Returns: { txid, satoshis, minerFee, change, transactionUrl }

ordnet_transferA

Transfer an inscription (ordinal, .web3/SNS/OPNS domain, BSVmap tile) to another address.

1SatOrdinals semantics: the inscription outpoint becomes input 0 and the 1-sat output to the recipient becomes output 0 — the sat carries the inscription. The outpoint is verified as unspent via ORDnet's own node before building. Miner fee only.

Args:

  • inscriptionTxid (string): txid of the inscription outpoint

  • inscriptionVout (number): output index (usually 0)

  • to (string): recipient BSV address

Returns: { txid, transferred, to, minerFee, transactionUrl }

ordnet_bsvmap_inscribeA

Claim a BSVmap tile by inscribing ".bsvmap" (text/plain), following the bitmap convention on BSV. Tiles 0-999999 map to the 1M-tile BSVmap grid.

Note: first-is-first — if the tile was already claimed on-chain, your inscription will not make you the owner. Check bsvmap.io first.

Args:

  • tile (number): tile number 0-999999

  • feePerByte (number, optional): default 0.15

Returns prepared inscription; broadcast with ordnet_inscribe_broadcast.

ordnet_inscribe_binaryA

Prepare an inscription for BINARY content (images, audio, video, PDF) from base64.

Bytes are inscribed untouched — use this instead of ordnet_inscribe_prepare for anything that is not text. Supported: image/png, image/jpeg, image/gif, image/webp, image/svg+xml, audio/mpeg, video/mp4, application/pdf.

Args:

  • contentBase64 (string): base64-encoded content

  • contentType (string): MIME type, e.g. image/png

  • feePerByte (number, optional): default 0.15

Returns prepared inscription; broadcast with ordnet_inscribe_broadcast.

ordnet_tx_statusA

Check the status and confirmations of a transaction via ORDnet's own node.

Essential after ordnet_send / ordnet_inscribe_broadcast / ordnet_transfer: poll this to see your transaction confirm.

Args:

  • txid (string): transaction ID

Returns: { txid, found, confirmations, blockhash, blocktime }

ordnet_priceA

Get the current BSV price in fiat, via ORDnet's own CoinGecko proxy.

Lets an agent convert satoshis to USD/EUR before spending.

Args:

  • currencies (string, optional): comma-separated, default "usd,eur"

Returns: { bsv: { usd, eur, ... }, satsPerUsd }

ordnet_identityA

Return the wallet's BRC-100 identity: its public key and address.

This is the agent's on-chain identity — counterparties can use the public key to verify signatures (ordnet_verify_message) and to confirm the agent controls the address. Requires an initialized wallet.

Returns: { publicKey, address }

ordnet_sign_messageA

Sign an arbitrary message with the wallet's private key (BRC-100 createSignature).

Use this to prove control of the identity key, authenticate to a service, or sign an x402 payment authorization off-chain. The private key never leaves the server. Requires an initialized wallet.

Args:

  • message (string): the message to sign

Returns: { publicKey, signature, messageHash }

ordnet_verify_messageA

Verify a signature against a message and public key (BRC-100 verifySignature).

Does NOT require a wallet — anyone can verify. Use this to check that a counterparty's message (e.g. a payment authorization or a signed quote) really came from the holder of a given public key.

Args:

  • message (string): the original message

  • signature (string): signature hex from ordnet_sign_message

  • publicKey (string): compressed public key hex of the claimed signer

Returns: { valid: boolean }

ordnet_derive_payment_addressA

Derive a unique, deterministic payment address for a given invoice or reference string (BRC-42/29-style key derivation).

Each invoice number yields a different address controlled by the same wallet, so incoming payments for different invoices are unlinkable on-chain — the foundation for clean x402 payment flows. The same invoice always derives the same address, so a payer and payee can compute it independently. Requires an initialized wallet.

Args:

  • invoiceNumber (string): invoice/reference string

Returns: { address, publicKey, invoiceNumber }

ordnet_x402_quoteA

Inspect an x402-paywalled URL WITHOUT paying: returns the price, payTo address, and payment requirements from the HTTP 402 response.

Use this to check costs before committing. Free and read-only.

Args:

  • url (string): resource URL

  • method (string, optional): GET or POST (default GET)

Returns: { isPaywalled, priceSats?, network?, payTo?, description?, accepts }

ordnet_x402_fetchA

Consume an x402-paywalled resource in one call: detect the 402, pay the quoted amount in native BSV sats from the loaded wallet, retry with proof, and return the resource plus the settlement receipt.

Safety:

  • maxSats is REQUIRED: the tool refuses quotes above it (agent-set budget)

  • the spend policy (ordnet_policy_status) is enforced on the payment

  • only the 'exact' scheme on network 'bsv' is supported; other networks (e.g. USDC on Base) are reported honestly as unsupported

  • non-paywalled URLs are fetched and returned without any payment

Args:

  • url (string): resource URL

  • method (string, optional): GET or POST (default GET)

  • maxSats (number): spending guard in satoshis

Returns: { status, body, paid?: { txid, satoshis, payTo }, receipt? }

Prompts

Interactive templates invoked by user choice

NameDescription
inscribe-websiteGuided workflow: put an HTML page permanently on the BSV blockchain
register-domainGuided workflow: check availability and register an SNS/OPNS domain
agent-paymentGuided workflow: send a BSV payment with a reference, safely

Resources

Contextual data attached and managed by the client

NameDescription
service-feesCurrent ORDnet service fee structure
domain-extensionsSupported domain extensions by chain

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/ORDNET/ORDnet-MCP-Server'

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