@parad0x_labs/null-mcp

MCP server for Web0 .null domains — agents resolve, buy (register), and bid on auctions. Returns unsigned Solana txs (BYO-signer, never holds keys). All tx layouts verified on mainnet.


Keywords
arweave, browser-extension, chrome-extension, decentralized, solana, web0
License
MIT
Install
npm install @parad0x_labs/null-mcp@0.10.0

Documentation

Web0 Resolver — the .null browser plugin

Type parad0x.null in your address bar and load a website that has no server, no host, no DNS — just a name on Solana pointing at content on Arweave. Nothing to seize, no one to send a takedown to.

manifest v3 solana mainnet license MIT no backend

This is a small, open browser extension that resolves .null domains. It reads a name's account on Solana, follows the pointer to Arweave, and loads the page. No backend, no tracking, ~100 lines of resolver logic. Read every byte before you run it.


See it work (30 seconds)

  1. Load the extension (below).
  2. Type parad0x.null in the address bar.
  3. It resolves on Solana and loads the live page from Arweave.

Don't trust it — verify on-chain:

link
the .null registry (mainnet program) NXgQhepF…WhV8Np
parad0x.null's on-chain name account DRDHB6…azS45

Install (Chrome · Brave · Edge · Arc · any Chromium browser)

There is no Web Store listing yet — this is load-unpacked, on purpose, so you can read the code first.

git clone https://github.com/Parad0x-Labs/web0-resolver.git
  1. Open chrome://extensions (or brave://extensions, edge://extensions).
  2. Turn on Developer mode (top-right).
  3. Click Load unpacked.
  4. Select the web0-resolver/extension folder — not the repo root.
  5. Confirm it loaded: you should see Null Resolver at version 0.1.2.

Now type any .null name. Done.

Updating later? git pull, then hit ↻ reload on the extension card. The version number is there so you can tell a fresh load from a stale one.


How it works

A normal site rents three things — a domain, a server, DNS. Pull any one and it's gone. .null removes all three:

  you type            the extension does                    you get
  ─────────           ─────────────────                     ───────
  parad0x.null   →    1. read the name's account on Solana
                      2. take the arweave_txid it points to  →   the page,
                      3. load that content from Arweave          from Arweave
  • The name is a Solana account (a PDA on the null_registrar program). The owner controls it with a keypair. No registrar.
  • The content lives on Arweave — paid once, stored permanently. No server.
  • The link between them is one field in the Solana account. Only the owner's key can change it. No DNS, no admin panel.

The extension catches the navigation (including the case where your browser's omnibox sends name.null to a search engine), does the lookup, and redirects the tab. That's the whole thing.

Want to resolve .null without a browser — from an agent, a script, a backend? See AGENTS.md. It's the same logic in ~15 lines of Node, with the on-chain byte layout and the RPC gotchas documented.


Claim a .null name

A name is just an account on the null_registrar program — a one-time ~0.003 SOL of rent (refundable if you ever close it), no annual renewal. Self-serve registration (one-command CLI + a simple UI) is rolling out next. Until then, watch this repo or follow @Parad0x_Labs. The resolver here is read-only — it never asks for a key, never signs anything.


Configure (optional)

Click the extension icon → Advanced to set your own Solana RPC (e.g. Helius, QuickNode, Triton). Whatever you save goes first in the resolver's RPC chain; the public fallbacks still back it up.

Leave it blank and it uses a built-in public chain (publicnode + onfinality). Do not set api.mainnet-beta.solana.com — see pitfalls.


Troubleshooting & pitfalls

symptom cause fix
"Couldn't reach Solana — HTTP 403" api.mainnet-beta.solana.com returns 403 to any request with a browser Origin header (works from curl, fails from an extension — a classic trap). The default chain already avoids it. If you set a custom RPC, don't use mainnet-beta; use publicnode or a keyed provider.
Page won't load right after a fresh publish Arweave gateway propagation lag — the tx is confirmed but one gateway hasn't synced. The resolver probes gateway.irys.xyzarweave.netar-io.net and uses the first that answers. Give it ~30–60s.
Still resolves to an old page A .null name is a mutable pointer; the owner re-pointed it. Your browser may also be caching. Hard-reload. The on-chain account always shows the current pointer (check the explorer link above).
Typed name opened a search instead The omnibox sent name.null to your search engine before the extension caught it. It catches the common search redirects; if your engine is unusual, type http://name.null directly.
Reload didn't change anything Chrome loaded a stale copy. Check the version on the extension card reads 0.1.2; if not, remove and re-add the extension/ folder.

Browser support: works today in any Chromium browser (Chrome, Brave, Edge, Arc, Opera). Firefox and Safari ports, a mobile resolver, and a Web Store listing are on the roadmap.


What's in here

extension/                  ← load THIS folder as unpacked
  manifest.json             MV3 manifest
  background.js             catches .null navigation, redirects to the resolver page
  codec.js                  pure decode helpers for the on-chain NullDomain layout
  null-resolver-page.*      the resolver page: Solana lookup → Arweave redirect + states
  popup.*                   toolbar popup: status + custom-RPC setting
  icon.png
test/codec.test.js          20 checks on the byte layout / base64url encoding
AGENTS.md                   resolve .null from code (for AI agents & backends)

Run the tests: node test/codec.test.js


Safety

  • Read-only. The resolver only reads public Solana accounts and fetches public Arweave content. It never asks for, holds, or signs with a key.
  • No backend, no analytics. Everything runs in your browser against public RPCs you can change.
  • host_permissions is <all_urls> because it must see navigations to any *.null URL. It does nothing on non-.null pages.

Built by Parad0x Labs. MIT licensed — fork it, ship your own client, resolve .null anywhere.

null servers. null censorship. null permission.