Universal MCP server for discovery, chat, registration, credits, and workflow automation across the HOL Registry Broker ecosystem.
| Surface | Link |
|---|---|
| npm package | @hol-org/hashnet-mcp |
| GitHub repo | hashgraph-online/hashnet-mcp-js |
| GitHub releases | Releases |
| Documentation | hol.org/mcp |
| CodeSandbox | Open examples in browser |
pnpm install
cp .env.example .env
pnpm dev:httpCommon launch modes:
pnpm dev:stdiopnpm dev:httppnpm dev:http:compatnpx @hol-org/hashnet-mcp --helpnpx @hol-org/hashnet-mcp --stdionpx @hol-org/hashnet-mcp --http --host 127.0.0.1 --port 3333
When installed globally or linked locally, the binary is hashnet-mcp.
| Transport | Endpoint(s) | Notes |
|---|---|---|
| stdio | process stdin/stdout | best for local agent runtimes |
| Streamable HTTP | /mcp, /mcp/stream |
recommended HTTP transport |
| legacy HTTP + SSE | /mcp/sse, /mcp/messages |
enabled with FEATURE_LEGACY_SSE=1 |
Runtime utility endpoints:
/healthz/readyz/metrics
- Discovery:
hol.stats,hol.capabilities,hol.search,hol.vectorSearch,hol.resolveUaid - Chat:
hol.chat.createSession,hol.chat.sendMessage,hol.chat.history,hol.chat.end - Registration:
hol.getRegistrationQuote,hol.registerAgent,hol.waitForRegistrationCompletion - Workflows:
workflow.discovery,workflow.delegate,workflow.registration
Tool success responses use structured envelopes in structuredContent:
okdatameta
Tool failures return isError: true with structured machine-readable error fields (code, category, retryable).
| Variable | Required | Notes |
|---|---|---|
REGISTRY_BROKER_API_URL |
no | defaults to https://hol.org/registry/api/v1 |
REGISTRY_BROKER_API_KEY |
no | enables paid tools with a static broker API key |
BROKER_REQUEST_TIMEOUT_MS |
no | default upstream request timeout is 60000 |
MCP_TRANSPORT |
no | http (default) or stdio |
MCP_HOST |
no | defaults to 127.0.0.1 |
MCP_PORT |
no | defaults to 3333 |
MCP_ALLOWED_ORIGINS |
no | comma-separated allow list |
MCP_SERVER_BEARER_TOKEN |
no | required when binding to a non-local host (for example 0.0.0.0) |
MCP_SESSION_IDLE_TTL_MS |
no | defaults to 900000 |
MCP_SESSION_MAX_COUNT |
no | defaults to 250 |
MCP_SESSION_REAP_INTERVAL_MS |
no | defaults to 60000 |
LEDGER_ACCOUNT_ID |
no | generic ledger identity fallback |
HEDERA_ACCOUNT_ID |
no | Hedera account id |
HEDERA_NETWORK |
no | e.g. hedera:testnet |
HEDERA_PRIVATE_KEY |
no | Hedera private key |
EVM_LEDGER_NETWORK |
no | e.g. eip155:1 |
ETH_PK |
no | EVM private key |
- Binds to
127.0.0.1by default. - Validates
Originfor HTTP requests when present. - Enforces bearer-token auth when binding to non-local hosts.
- Reaps idle HTTP sessions and enforces max active sessions.
- Redacts sensitive values in logs.
| Command | Purpose |
|---|---|
pnpm build |
compile distributable artifacts |
pnpm start |
run compiled server |
pnpm lint |
run ESLint |
pnpm typecheck |
run TypeScript checks |
pnpm test:run |
run Vitest once |
pnpm test:coverage |
run Vitest with coverage |
pnpm check:no-stubs |
enforce no-stubs contract |
pnpm smoke:http |
streamable HTTP smoke test |
pnpm smoke:stdio |
stdio smoke test |
GitHub releases are generated automatically from merged pull requests:
- release tags are created during publish (
vX.Y.Z) - GitHub release notes are generated with GitHub's release-note engine
- changelog categories are controlled via
.github/release.yml - canonical docs links are appended to each release