{
  "markdown": "# Hashnet MCP JS\n\n[![npm version](https://img.shields.io/npm/v/%40hol-org%2Fhashnet-mcp?logo=npm)](https://www.npmjs.com/package/@hol-org/hashnet-mcp)\n[![npm downloads](https://img.shields.io/npm/dm/%40hol-org%2Fhashnet-mcp?logo=npm)](https://www.npmjs.com/package/@hol-org/hashnet-mcp)\n[![Node version](https://img.shields.io/node/v/%40hol-org%2Fhashnet-mcp)](https://www.npmjs.com/package/@hol-org/hashnet-mcp)\n[![Bundle size](https://img.shields.io/bundlephobia/minzip/%40hol-org%2Fhashnet-mcp)](https://bundlephobia.com/package/@hol-org/hashnet-mcp)\n[![Publish](https://github.com/hashgraph-online/hashnet-mcp-js/actions/workflows/publish.yml/badge.svg?branch=master)](https://github.com/hashgraph-online/hashnet-mcp-js/actions/workflows/publish.yml)\n[![Canary](https://github.com/hashgraph-online/hashnet-mcp-js/actions/workflows/publish-canary.yml/badge.svg?branch=master)](https://github.com/hashgraph-online/hashnet-mcp-js/actions/workflows/publish-canary.yml)\n[![License](https://img.shields.io/github/license/hashgraph-online/hashnet-mcp-js)](https://github.com/hashgraph-online/hashnet-mcp-js/blob/master/LICENSE)\n[![CodeSandbox](https://img.shields.io/badge/CodeSandbox-Open-151515?logo=codesandbox)](https://codesandbox.io/p/sandbox/github/hashgraph-online/hashnet-mcp-js/tree/master)\n\nUniversal MCP server for discovery, chat, registration, credits, and workflow automation across the HOL Registry Broker ecosystem.\n\n## Ecosystem\n\n| Surface | Link |\n| --- | --- |\n| npm package | [`@hol-org/hashnet-mcp`](https://www.npmjs.com/package/@hol-org/hashnet-mcp) |\n| GitHub repo | [hashgraph-online/hashnet-mcp-js](https://github.com/hashgraph-online/hashnet-mcp-js) |\n| GitHub releases | [Releases](https://github.com/hashgraph-online/hashnet-mcp-js/releases) |\n| Documentation | [hol.org/mcp](https://hol.org/mcp) |\n| CodeSandbox | [Open examples in browser](https://codesandbox.io/p/sandbox/github/hashgraph-online/hashnet-mcp-js/tree/master) |\n\n## Quickstart\n\n```bash\npnpm install\ncp .env.example .env\npnpm dev:http\n```\n\nCommon launch modes:\n\n- `pnpm dev:stdio`\n- `pnpm dev:http`\n- `pnpm dev:http:compat`\n- `npx @hol-org/hashnet-mcp --help`\n- `npx @hol-org/hashnet-mcp --stdio`\n- `npx @hol-org/hashnet-mcp --http --host 127.0.0.1 --port 3333`\n\nWhen installed globally or linked locally, the binary is `hashnet-mcp`.\n\n## Supported Transports\n\n| Transport | Endpoint(s) | Notes |\n| --- | --- | --- |\n| stdio | process stdin/stdout | best for local agent runtimes |\n| Streamable HTTP | `/mcp`, `/mcp/stream` | recommended HTTP transport |\n| legacy HTTP + SSE | `/mcp/sse`, `/mcp/messages` | enabled with `FEATURE_LEGACY_SSE=1` |\n\nRuntime utility endpoints:\n\n- `/healthz`\n- `/readyz`\n- `/metrics`\n\n## Tool Surface\n\n- Discovery: `hol.stats`, `hol.capabilities`, `hol.search`, `hol.vectorSearch`, `hol.resolveUaid`\n- Chat: `hol.chat.readiness`, `hol.chat.createSession`, `hol.chat.sendMessage`, `hol.chat.retry`, `hol.chat.history`, `hol.chat.resume`, `hol.chat.end`\n- Registration: `hol.getRegistrationQuote`, `hol.registerAgent`, `hol.waitForRegistrationCompletion`\n- Workflows: `workflow.discovery`, `workflow.delegate`, `workflow.registration`\n\nTool success responses use structured envelopes in `structuredContent`:\n\n- `ok`\n- `data`\n- `meta`\n\nTool failures return `isError: true` with structured machine-readable error fields (`code`, `category`, `retryable`).\n\n## Configuration\n\n| Variable | Required | Notes |\n| --- | --- | --- |\n| `REGISTRY_BROKER_API_URL` | no | defaults to `https://hol.org/registry/api/v1` |\n| `REGISTRY_BROKER_API_KEY` | no | enables paid tools with a static broker API key |\n| `BROKER_REQUEST_TIMEOUT_MS` | no | default upstream request timeout is `60000` |\n| `MCP_TRANSPORT` | no | `http` (default) or `stdio` |\n| `MCP_HOST` | no | defaults to `127.0.0.1` |\n| `MCP_PORT` | no | defaults to `3333` |\n| `MCP_ALLOWED_ORIGINS` | no | comma-separated allow list |\n| `MCP_SERVER_BEARER_TOKEN` | no | required when binding to a non-local host (for example `0.0.0.0`) |\n| `MCP_SESSION_IDLE_TTL_MS` | no | defaults to `900000` |\n| `MCP_SESSION_MAX_COUNT` | no | defaults to `250` |\n| `MCP_SESSION_REAP_INTERVAL_MS` | no | defaults to `60000` |\n| `LEDGER_ACCOUNT_ID` | no | generic ledger identity fallback |\n| `HEDERA_ACCOUNT_ID` | no | Hedera account id |\n| `HEDERA_NETWORK` | no | e.g. `hedera:testnet` |\n| `HEDERA_PRIVATE_KEY` | no | Hedera private key |\n| `EVM_LEDGER_NETWORK` | no | e.g. `eip155:1` |\n| `ETH_PK` | no | EVM private key |\n\n## Security Defaults\n\n- Binds to `127.0.0.1` by default.\n- Validates `Origin` for HTTP requests when present.\n- Enforces bearer-token auth when binding to non-local hosts.\n- Reaps idle HTTP sessions and enforces max active sessions.\n- Redacts sensitive values in logs.\n\n## Development\n\n| Command | Purpose |\n| --- | --- |\n| `pnpm build` | compile distributable artifacts |\n| `pnpm start` | run compiled server |\n| `pnpm lint` | run ESLint |\n| `pnpm typecheck` | run TypeScript checks |\n| `pnpm test:run` | run Vitest once |\n| `pnpm test:coverage` | run Vitest with coverage |\n| `pnpm check:no-stubs` | enforce no-stubs contract |\n| `pnpm smoke:http` | streamable HTTP smoke test |\n| `pnpm smoke:stdio` | stdio smoke test |\n\n## Release Notes Automation\n\nGitHub releases are generated automatically from merged pull requests:\n\n- release tags are created during publish (`vX.Y.Z`)\n- GitHub release notes are generated with GitHub's release-note engine\n- changelog categories are controlled via `.github/release.yml`\n- canonical docs links are appended to each release\n",
  "bytes": 5536,
  "sha": "38775b52a6fbe255b72fc0a681a4c352a73eceb8969a006a9265460ade26273e",
  "repo_slug": "hashgraph-online/hashnet-mcp-js",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_hashgraph_online_hashnet_7423087a/readme"
}