# NimBooks (npm · nimbooks-mcp)

Read-only Nimiq books: balances, history, statements, staking, payment and stake links. Never signs.

- Trust score: 74/100 (medium)
- Change this week: +4
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- npm · `nimbooks-mcp`: 74/100 (this document), [markdown](https://verifymcp.io/servers/subimpact-nimbooks-mcp/nimbooks-mcp.md), [page](https://verifymcp.io/servers/subimpact-nimbooks-mcp/nimbooks-mcp)

## Channel facts

- Registry: `npm`
- Package: `nimbooks-mcp`
- Version: `1.3.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 30 of 92 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 8 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 65/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2525 tokens (~229/item across 11 items; 11 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 40/100
  - Stability observed for 12 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 11 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 12 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the NimBooks MCP server?

NimBooks runs locally as an npm package, launched with npx -y nimbooks-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add subimpact-nimbooks-mcp -- npx -y nimbooks-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "subimpact-nimbooks-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "nimbooks-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "subimpact-nimbooks-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "nimbooks-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add subimpact-nimbooks-mcp -- npx -y nimbooks-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "subimpact-nimbooks-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "nimbooks-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add subimpact-nimbooks-mcp --command npx --arg -y --arg nimbooks-mcp
```

### Hermes

```yaml
mcp_servers:
  subimpact-nimbooks-mcp:
    command: "npx"
    args: ["-y", "nimbooks-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "subimpact-nimbooks-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "nimbooks-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add subimpact-nimbooks-mcp -t stdio -c npx -a -y nimbooks-mcp
```

### Other

```json
{
  "mcpServers": {
    "subimpact-nimbooks-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "nimbooks-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 74, +1)

No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-03 (score 73, +1)

No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-01 (score 72, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-30 (score 71, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-29 (score 70, +26)

- [security improvement] Malware scan: unverified → pass
- [security improvement] Known CVEs: unverified → pass
- [functional improvement] Dependency health: unverified → 0.86

### 2026-10-28 (score 44, −24)

- [security regression] Known CVEs: pass → unverified
- [security regression] Malware scan: pass → unverified
- [functional regression] Dependency health: 0.85 → unverified
- [functional improvement] Stability: unverified → 0.13
- [functional] Package version: 1.2.1 → 1.3.0
- [functional] Package version: 1.2.1 → 1.2.2

### 2026-10-25 (score 68, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-24 (score 53)

First indexed and scored.

## MCP tools (11)

### `get_summary` (~269 tokens)

Account summary

Balance and money in/out for a Nimiq address over a window. Read-only: never signs, never sends. Defaults to the full history the public index returns (up to 1000 transactions, newest first). Balance is the live account balance now, not the balance at the end of the window; any staked NIM is reported separately because it lives in the staking contract. Money out includes transfers into the staking contract and out of it — the same treatment as the app’s statement; validator rewards arrive through a separate channel and are reported as their own line (rewardsReceivedNim). Nimiq Pay’s round trips through its own contracts are the wallet’s own money and are reported as internalIn/internalOut, not as money in or out, the same split the app makes; netNim counts both.

Input parameters:

- `address` (string): Nimiq address — "NQ82 6GYU …", the flat form, or 40 hex characters. Optional; defaults to the server’s configured address.
- `since` (string): Start of the window, YYYY-MM-DD or ISO 8601 (UTC). Default: no start.
- `until` (string): End of the window, YYYY-MM-DD or ISO 8601 (UTC). Default: now.

### `list_transactions` (~200 tokens)

List transactions

Classified transactions for a Nimiq address, newest first. Read-only: never signs, never sends. Each row carries the kind the NimBooks app shows (payment, stake, unstake, reward, swap, vesting), the counterparty, and the memo — a cashlink’s protocol tag reads as "Cashlink" rather than raw bytes, and a `nimbooks:invoice:<id>` memo is the reference that ties a payment to a request.

Input parameters:

- `address` (string): Nimiq address (NQ form, spaced or flat, or 40 hex characters). Optional; defaults to the server’s configured address.
- `limit` (integer): Rows to return. Default 50.
- `since` (string): Only transactions at or after this date (YYYY-MM-DD or ISO 8601, UTC).
- `until` (string): Only transactions at or before this date (YYYY-MM-DD or ISO 8601, UTC).

### `get_statement` (~237 tokens)

Daily statement

Day-by-day money in and out for a year (or one month of it), priced at the CoinGecko daily close in USD for each UTC day — the same basis the NimBooks tax statement uses. Read-only: never signs, never sends. Failed transactions are excluded and fees are counted on outgoing transactions only. Staking rewards (restaking payouts) are included as in-day income; moving NIM into or out of the staking contract is not a fiat flow, so it is excluded, exactly like the app’s statement. Nimiq Pay’s round trips through its own contracts go in internalInNim/internalOutNim, not in or out, as in the app. Days with no price available come back with closeUsd: null rather than a guess.

Input parameters:

- `address` (string): Nimiq address (NQ form, spaced or flat, or 40 hex characters). Optional; defaults to the server’s configured address.
- `month` (integer): Optional month 1–12. Omit for the whole year.
- `year` (integer, required): Calendar year, UTC — e.g. 2026.

### `create_payment_request` (~280 tokens)

Draft a payment request

DRAFTS a payment request and returns a shareable link. This never signs anything, never sends anything, and never marks anything paid — the whole request rides inside the link, and only the payer’s wallet, with their approval, can actually move money. The link opens in the NimBooks app; the payment it produces carries the reference nimbooks:invoice:<id>, which check_request_paid looks for later. Note: inside the link, the payload field amountNim is denominated in Luna by the app’s link format; this tool’s own output reports amountNim in NIM and amountLuna in Luna.

Input parameters:

- `amountNim` (string, required): Amount in NIM, as a decimal string — "12.5". Up to 5 decimals (1 NIM = 100000 Luna).
- `expiry` (string): When the request stops being valid: "1h", "24h", "7d", "none" (default), or an ISO 8601 timestamp.
- `id` (string): Fixed request id, for reproducible links. Generated when omitted.
- `memo` (string): What the request is for, up to 80 characters. Travels in the link, not on chain.
- `payee` (string): Address to be paid. Optional; defaults to the server’s configured address.

### `check_request_paid` (~117 tokens)

Check whether a request was paid

Looks for a payment tagged with a request’s reference (nimbooks:invoice:<id>) in the address’s transactions — the same match the NimBooks app uses to mark a request paid. Read-only: it reports what the chain says and changes nothing, here or in the app. Scans the newest 200 transactions.

Input parameters:

- `address` (string): The payee address the request was made for. Optional; defaults to the server’s configured address.
- `id` (string, required): The request id, as returned by create_payment_request.

### `list_invoices` (~97 tokens)

List saved payment requests

Payment requests stored in a NimBooks backup file (the app keeps them on the device; there is no server holding them). Requires the server to be started with --backup <path>. Read-only: the file is never written to, and the cashlink shelf inside it — which holds link private keys — is never opened.

Input parameters:

- `address` (string): The account whose requests to list. Optional; defaults to the server’s configured address.

### `get_staking` (~170 tokens)

Staked position

A Nimiq address's staking position: active staked, inactive (cooling down after an unstake), retired (ready to withdraw) and total, plus the pool it is staked to with its fee, net yield and payout type, an unstake clock (a retire only becomes valid one full epoch after deactivation), and a first-year rewards estimate at the pool's current net yield. Read-only: reads the public chain and the public validators list, never signs and never sends. Never staked reads as staked: false, never as a failed lookup; a failed lookup is an error that says so.

Input parameters:

- `address` (string): Nimiq address (NQ form, spaced or flat, or 40 hex characters). Optional; defaults to the server’s configured address.

### `list_validators` (~184 tokens)

Nimiq validator pools

The Nimiq validator pools of the current epoch, ranked neutrally, exactly as the NimBooks app ranks them: producing pools first (those with a reliability score this epoch), best net annual yield first within them, pools that publish no yield last, then the non-producing pools, and the name as the final stable tiebreak. Nothing is pinned first. Read-only: one call to the public validators list, never signs and never sends. netYieldPercent is the net annual yield on the network's total stake after the pool's fee, the Nimiq wallet's convention; it moves as emission falls and as stake moves.

Input parameters:

- `includeNonProducing` (boolean): Include pools with no reliability score this epoch (they earn nothing right now). Default true.
- `limit` (integer): Pools to return, 1 to 50. Default 50.

### `project_yield` (~302 tokens)

Project staking yield

Projects what staking an amount of NIM might earn, year by year. With an explicit rate it is a pure offline calculation. Read-only, never signs and never sends. Rate resolution, in order: an explicit annualRatePercent, then the named pool's current net yield, then the median of the producing pools. Compounding follows the pool's payout type (direct pools pay out, the rest restake) unless an explicit compound choice is given. Returns per-year rewards, cumulative rewards and balance, plus its assumptions: emission falls along the protocol supply curve, the network's total stake is held at today's level, and it is a projection, not a promise.

Input parameters:

- `amountNim` (string, required): Amount to stake, in NIM, as a decimal string, e.g. "1000". At most 5 decimals.
- `annualRatePercent` (number): Explicit annual rate in percent, more than 0 and at most 100. Wins over any pool's or the typical rate, and makes the call work offline.
- `compound` (boolean): Restake rewards as they arrive (true) or pay them out (false). Default: the pool's payout type, else true.
- `validator` (string): A pool: its NQ address, exact name, or a unique part of the name (list_validators has them).
- `years` (integer): Horizon in years, 1 to 10. Default 1.

### `get_rewards` (~277 tokens)

Staking rewards

Staking rewards for an address over a window: the total (Luna and NIM), the reward days, the first and last reward date, and the breakdown per paying pool, plus an actual yield over the trailing 30 days measured against the current active stake and the current validator's estimate for comparison. Read-only, never signs and never sends. Important: only restaking (compounding) pools show up in this data; a direct-payout pool's rewards arrive as ordinary incoming transactions and are found with list_transactions instead. The public rewards data starts January 2025, so earlier asks come back empty, and it can lag by a day. A year Nimiq Watch did not answer is named in the answer, never silently dropped.

Input parameters:

- `address` (string): Nimiq address (NQ form, spaced or flat, or 40 hex characters). Optional; defaults to the server’s configured address.
- `includeDays` (boolean): Include the per-day reward rows, newest first, at most 400. Default false.
- `since` (string): Start of the window, YYYY-MM-DD or ISO 8601 (UTC). Default: the start of the public rewards data.
- `until` (string): End of the window, YYYY-MM-DD or ISO 8601 (UTC). Default: now.

### `draft_stake` (~240 tokens)

Draft a stake link

DRAFTS a stake and returns a link only. This never signs anything and never sends anything: the link opens the NimBooks app with the stake panel pre-filled, and you check the amount and validator there and confirm in your own wallet. No validator is recommended, ranked or chosen for you, and there is no default validator. The link is the deliverable, exactly like create_payment_request: nothing is built, broadcast or queued here, and nothing is marked as staked. Notes explain what the app will do with the values, including a cap to the free balance and the 100 NIM first-stake minimum.

Input parameters:

- `address` (string): The staker account, used only to read the current delegation and liquid balance for notes. Optional; defaults to the server’s configured address.
- `amountNim` (string|number): Amount in NIM, decimal, at most 5 decimals. An omitted or invalid amount is left out of the link with a note.
- `validator` (string): A validator NQ address, or a validator name (exact, or a unique part of the name). There is no default validator.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/subimpact-nimbooks-mcp/nimbooks-mcp#diagnostics

## Score history

- 2026-11-05: 74
- 2026-11-04: 73
- 2026-11-03: 73
- 2026-11-02: 72
- 2026-11-01: 72
- 2026-10-31: 71
- 2026-10-30: 71
- 2026-10-29: 70
- 2026-10-28: 44
- 2026-10-27: 68
- 2026-10-26: 68
- 2026-10-25: 68
- 2026-10-24: 53

## Common questions

### What is the NimBooks MCP server?

NimBooks is an MCP server listed in the public MCP registry as io.github.subimpact/nimbooks-mcp. Read-only Nimiq books: balances, history, statements, staking, payment and stake links. Never signs. This page covers its npm package (nimbooks-mcp).

### Is the NimBooks MCP server safe to use?

NimBooks scores 74 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the NimBooks MCP server expose?

NimBooks exposes 11 tools: get_summary, list_transactions, get_statement, create_payment_request, check_request_paid, and 6 more. Their descriptions and schemas cost roughly 2,373 tokens of context every time the server is loaded.

### Is the NimBooks MCP server still maintained?

NimBooks is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the NimBooks MCP server under?

NimBooks declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

### What did VerifyMCP test on the NimBooks MCP server?

VerifyMCP ran 16 checks on NimBooks, covering Malware scan, Known CVEs, Install scripts, Dependency health and 12 more. Endpoint Security and Transport & Reachability do not apply to an npm package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- npm package: https://www.npmjs.com/package/nimbooks-mcp
- Socket report: https://socket.dev/npm/package/nimbooks-mcp
- Repository: https://github.com/subimpact/nimbooks-mcp
- Website: https://nimbooks.subimpact.net/mcp/
- Changelog RSS feed: https://verifymcp.io/servers/subimpact-nimbooks-mcp/nimbooks-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/subimpact-nimbooks-mcp/nimbooks-mcp/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/subimpact-nimbooks-mcp/nimbooks-mcp.json
- HTML version of this page: https://verifymcp.io/servers/subimpact-nimbooks-mcp/nimbooks-mcp
