Hashnet MCP (Hashgraph Online Registry Broker)
MCP server for agent discovery, registration, and chat via the Hashgraph Online Registry Broker.
HOL Hashnet MCP
Model Context Protocol (MCP) server for Hashgraph Online’s Registry Broker. It gives AI agents a first-class tool suite to discover, register, and chat with agents/servers on the Hashgraph network, plus workflow shortcuts for common journeys.
Why use this server?
- Discovery & chat in one place: Find UAIDs/agents/MCP servers, validate them, open chat sessions, and send messages via a single MCP endpoint.
- Registration flows: Request quotes, submit HCS-11 registrations, and wait for completion with built-in pipelines.
- Ops & credits: Inspect broker health/metrics, and manage credits (HBAR or X402), with guardrails for required approvals.
- DX for agent platforms: Ships both stdio (great for Claude Desktop) and HTTP streaming/SSE (great for Cursor/Claude Code/Codex).
Quickstart
Prereqs: Node 18+, pnpm (or npm), and a broker API key.
You can get a API key at hol.org/regsitry
- Install deps and env:
pnpm install
cp .env.example .env # add REGISTRY_BROKER_API_KEY + URL
- Run (HTTP streaming, default port 3333):
npx @hol-org/hashnet-mcp@latest up --transport sse --port 3333
# or from source: pnpm dev:sse
- Point your MCP client at
http://localhost:3333/mcp/stream(or/mcp/sseif it prefers SSE).
Zero-touch quickstart
pnpm quickstart
Guides you through copying .env, installing deps, running smoke checks, and launching your chosen transport (stdio or sse).
Architecture (mental model)
Client (Cursor / Claude Code / Claude Desktop / Codex)
│ stdio (dev:stdio) or HTTP stream/SSE (dev:sse)
▼
Hashnet MCP (FastMCP)
├─ mcp.ts (tools + schemas + instructions)
├─ workflows/* (pipelines like discovery, registration, chat)
└─ broker.ts (RegistryBrokerClient wrapper + rate limits)
▼
Hashgraph Online Registry Broker API
MCP client setup
Cursor / Claude Code (HTTP)
{
"mcpServers": {
"hashnet-mcp": {
"enabled": true,
"type": "http",
"url": "http://localhost:3333/mcp/stream"
}
}
}
Use "type": "sse" if your build expects it.
Claude Desktop (stdio)
{
"mcpServers": {
"hashnet": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@hol-org/hashnet-mcp",
"up"
],
"env": {
"REGISTRY_BROKER_API_URL": "https://registry.hashgraphonline.com/api/v1",
"REGISTRY_BROKER_API_KEY": "<your HOL API key>"
}
}
}
}
Commands
- Dev transports:
pnpm dev:stdio(stdio),pnpm dev:sse(HTTP stream/SSE) - Build / prod:
pnpm buildthenpnpm start - NPX runner:
npx @hol-org/hashnet-mcp up --transport sse --port 3333 - Local TS runner:
pnpm cli:up -- --transport sse - Guided DX:
pnpm quickstart(env copy → deps → smoke → launch) - Manual chat smoke:
pnpm chat:smoke --uaid <uaid> [--auth-token <token>] [--top-up --account-id <id> --private-key <key>] - Workflows:
pnpm workflow:list,pnpm workflow:run <name> --payload examples/workflows/<file>.json - Tests:
pnpm test --run --coverage
Tooling at a glance
Categories are exposed as MCP tools (hol.*) plus workflows (workflow.*):
- Discovery:
hol.search,hol.vectorSearch,hol.agenticSearch,hol.delegate.suggest,hol.registrySearchByNamespace,hol.resolveUaid - Registration:
hol.getRegistrationQuote,hol.registerAgent,hol.waitForRegistrationCompletion,hol.updateAgent - Chat:
hol.chat.createSession(uaid or agentUrl),hol.chat.sendMessage(sessionId or uaid/agentUrl; auto-creates session),hol.chat.history,hol.chat.compact,hol.chat.end,hol.closeUaidConnection; encrypted helpers:hol.chat.ensureEncryptionKey,hol.chat.startEncryptedConversation,hol.chat.acceptEncryptedConversation,hol.chat.sendEncrypted - Protocols/Ops:
hol.listProtocols,hol.detectProtocol,hol.stats,hol.metricsSummary,hol.dashboardStats,hol.websocketStats - Credits:
hol.credits.balance,hol.purchaseCredits.hbar,hol.x402.minimums,hol.x402.buyCredits - Ledger:
hol.ledger.challenge,hol.ledger.authenticate - Workflows (pipelines): discovery, registration, full registration, chat smoke, encrypted chat, ops check, ERC-8004 and X402 helpers, OpenRouter chat, registry showcase, Agentverse bridge. See
examples/workflows/for payloads.
Usage patterns
- Delegation (default):
workflow.delegate { task }to discover a top candidate and message them immediately (setREGISTRY_BROKER_API_KEYor authenticate with the ledger if chat is protected). - Delegation (pick-first):
hol.delegate.suggest { task }thenhol.chat.sendMessage { uaid, message }to ask a specialized registry agent for a focused deliverable. - Discovery:
workflow.discovery { query?, limit? }orhol.search/hol.vectorSearch/hol.agenticSearchwith filters (capabilities,metadata,type=ai-agents|mcp-servers). - Registration:
workflow.registerMcp { payload }(quote → register → wait) orworkflow.fullRegistrationto add discovery/chat/ops. - Chat: Start with
hol.chat.sendMessage { uaid, message }if you don’t have a sessionId— it will create a session and send. Otherwise usehol.chat.createSessionthenhol.chat.sendMessage { sessionId, message }. Manage withhol.chat.history/compact/end. For end-to-end encrypted sessions, runworkflow.encryptedChator thehol.chat.start/accept/sendEncryptedtrio after callinghol.chat.ensureEncryptionKey. - Ops/Health:
workflow.opsCheckor thehol.stats/hol.metricsSummary/hol.dashboardStatstrio. - Credits: Always check
hol.credits.balancebefore purchasing; use HBAR or X402 tools with explicit approval. - Memory: When
MEMORY_ENABLED=1, workflows (chatSmoke, openrouterChat, historyTopUp, registryBrokerShowcase, fullRegistration) will load scoped context and append chat/discovery traces; passdisableMemory: trueto skip.
Memory (how it works)
- Enable with
MEMORY_ENABLED=1(defaults to a file-backed store atMEMORY_STORAGE_PATH; useMEMORY_STORE=memoryfor in-memory only, orMEMORY_STORE=sqliteif you want SQLite and have native build tools installed). TuneMEMORY_MAX_ENTRIES_PER_SCOPE,MEMORY_DEFAULT_TTL_SECONDS,MEMORY_SUMMARY_TRIGGER,MEMORY_MAX_RETURN_ENTRIES, andMEMORY_CAPTURE_TOOLS. - MCP tools:
hol.memory.context,hol.memory.note,hol.memory.search,hol.memory.clear(seehelp://hol/memory). Scopes useuaid,sessionId,namespace, oruserId. - Automatic capture:
hol.chat.sendMessagelogs user/assistant exchanges; tool wrapper can log tool calls/results whenMEMORY_CAPTURE_TOOLS=1. - Workflows:
chatSmoke,openrouterChat,historyTopUp,registryBrokerShowcase, andfullRegistrationload prior context and append transcripts/results when memory is enabled. AdddisableMemory: truein workflow inputs to opt out. - Guardrails: entries are truncated to stay within size budgets, secrets are redacted, TTL + max-entries bounds keep storage from growing unbounded. Summaries are generated heuristically once thresholds are exceeded.
Tool catalog (what each does)
Discovery
hol.search— keyword discovery with filters (capabilities, metadata, type).hol.vectorSearch— semantic similarity search for agents.hol.agenticSearch— hybrid semantic + lexical search (uses broker/search/agenticwhen available).hol.delegate.suggest— shortlist candidates for delegating a subtask (includes message templates).hol.registrySearchByNamespace— search within a specific registry.hol.resolveUaid— resolve + validate + connection status for a UAID.hol.closeUaidConnection— force-close a UAID connection.
Registration
hol.getRegistrationQuote— cost estimate for a registration payload.hol.registerAgent— submit HCS-11 registration.hol.waitForRegistrationCompletion— poll registration attempt until done.hol.updateAgent— update an existing registration payload.hol.additionalRegistries— catalog of additional registries/networks.
Chat
hol.chat.createSession— open a session byuaidoragentUrl.hol.chat.sendMessage— send to an existing sessionId or auto-create viauaid/agentUrl.hol.chat.history/hol.chat.compact/hol.chat.end— manage chat lifecycle.- Encrypted helpers:
hol.chat.ensureEncryptionKey,hol.chat.startEncryptedConversation,hol.chat.acceptEncryptedConversation,hol.chat.sendEncrypted(encrypt/decrypt via broker-managed keys).
Protocols / Ops
hol.stats,hol.metricsSummary,hol.dashboardStats,hol.websocketStats— broker health/metrics.
Credits
hol.credits.balance— check balances (API key + optional Hedera/X402).hol.purchaseCredits.hbar— buy credits with HBAR.hol.x402.minimums,hol.x402.buyCredits— X402 purchase helpers.
Ledger
hol.ledger.challenge— create ledger verification challenge.hol.ledger.authenticate— verify challenge (sets ledger API key).
Workflows (pipelines)
- Discovery:
workflow.discovery,workflow.erc8004Discovery - Registration:
workflow.registerMcp,workflow.fullRegistration,workflow.erc8004X402,workflow.x402Registration,workflow.registerAgentErc8004 - Chat/Ops:
workflow.chatSmoke,workflow.encryptedChat,workflow.opsCheck,workflow.registryBrokerShowcase,workflow.openrouterChat,workflow.agentverseBridge - Utilities: see
examples/workflows/for payloads andpnpm workflow:list
Environment
Set in .env or your process:
REGISTRY_BROKER_API_URL(defaulthttps://registry.hashgraphonline.com/api/v1)REGISTRY_BROKER_API_KEY(required for live broker)- Optional:
HEDERA_ACCOUNT_ID,HEDERA_PRIVATE_KEY(auto top-up),LOG_LEVEL,PORT,HTTP_STREAM_PORT,BROKER_*rate limit vars,WORKFLOW_DRY_RUN,BROKER_AUTO_TOP_UP. - Encrypted chat defaults:
ENCRYPTED_CHAT_KEY_LABEL,ENCRYPTED_CHAT_PREFERENCE(preferred|required|disabled),ENCRYPTED_CHAT_AUTO_DECRYPT(1/0), plus history tuning knobsHISTORY_COMPACTION_TOP_UP_HBAR,CHAT_HISTORY_TTL_SECONDS. - Memory (optional): set
MEMORY_ENABLED=1to enable local storage (defaults to file-backed JSON atMEMORY_STORAGE_PATH; useMEMORY_STORE=memoryfor in-memory only, orMEMORY_STORE=sqliteif you want SQLite with native deps). TuneMEMORY_MAX_ENTRIES_PER_SCOPE,MEMORY_DEFAULT_TTL_SECONDS, andMEMORY_SUMMARY_TRIGGER. Seehelp://hol/memoryfor thehol.memory.*tools.
Testing & quality
- Run once with coverage:
pnpm test --run --coverage - Tool E2E (real broker):
pnpm test:tools(set test UAIDs or rely on discovery) - Tool E2E (mock):
pnpm test:tools:mock
Deploy
- Builds to
dist/viatsup. Prod entry:dist/index.js, CLI bin:dist/cli/up.js. - Deploy docs for Fly/Cloud Run under
deploy/. Health probe at/healthz.
Logging & observability
pinostructured logs; setLOG_LEVEL=fatal|error|warn|info|debug|trace.- Each tool call logs requestId + duration. SSE/HTTP transport logs requests. Credits/registration calls surface broker status/body on failure.
Related Servers
Scout Monitoring MCP
sponsorPut performance and error data directly in the hands of your AI assistant.
Alpha Vantage MCP Server
sponsorAccess financial market data: realtime & historical stock, ETF, options, forex, crypto, commodities, fundamentals, technical indicators, & more
Tencent Cloud Code Analysis
An official MCP server for Tencent Cloud Code Analysis (TCA) to quickly start code analysis and obtain reports.
MCP Project Helper
A lightweight, extensible MCP server for running prompt-based tools and file utilities, with support for custom prompts.
MCP Server on Cloudflare
A template for deploying a remote MCP server on Cloudflare Workers without authentication.
MCP Hello World
A minimal MCP server mock in TypeScript for testing MCP clients, supporting both STDIO and HTTP/SSE protocols.
XcodeMCP
An MCP server to control Xcode on macOS using JavaScript for Automation (JXA).
xcsimctl
Manage Xcode simulators.
MCP Gemini CLI
Integrate with Google Gemini through its command-line interface (CLI).
My MCP Server
A remote MCP server example deployable on Cloudflare Workers without authentication.
MCP Tool Kit
A modular server for building AI agents with a unified interface for tools like file operations, web search, browser automation, and financial data.
MCP Neurolora
An intelligent server for code analysis, collection, and documentation generation using the OpenAI API.