# dev.journalize/journalize (remote · journalize.dev)

Agent-native double-entry accounting ledger with x402 micropayments

- Trust score: 53/100 (low)
- Change this week: +5
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `journalize.dev`: 53/100 (this document), [markdown](https://verifymcp.io/servers/dev-journalize-journalize/journalize.md), [page](https://verifymcp.io/servers/dev-journalize-journalize/journalize)

## Channel facts

- Endpoint: `https://journalize.dev/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, 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-08-03.

- **Endpoint Security**: 46/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 11 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS not yet verified: we couldn't determine whether a plaintext access path exists.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 44/100
  - AI-judged instruction clarity (fair).
  - Context-footprint check failed: tool/resource definitions use about 1403 tokens (~127/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**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 67/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http dev-journalize-journalize https://journalize.dev/mcp
```

### Codex

```toml
[mcp_servers.dev-journalize-journalize]
url = "https://journalize.dev/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dev-journalize-journalize": {
      "type": "remote",
      "url": "https://journalize.dev/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add dev-journalize-journalize --url https://journalize.dev/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  dev-journalize-journalize:
    url: "https://journalize.dev/mcp"
```

### Other

```json
{
  "mcpServers": {
    "dev-journalize-journalize": {
      "type": "http",
      "url": "https://journalize.dev/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## 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-08-03 (score 53, +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-08-01 (score 52, +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-07-31 (score 51, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 50, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-29 (score 50, +1)

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

### 2026-07-28 (score 49, +1)

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

### 2026-07-27 (score 48, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 48)

First indexed and scored.

## MCP tools (11)

### `submit_directive` (~180 tokens)

Submit one Beancount directive (open, transaction, close, balance,
    price, note, document — any type). Paid, except your first 20
    accepted writes per registered key, which are free (this specific
    tool only — submit_batch is always paid, even for your first call).
    Call with no payment_header first: if free writes remain, this
    succeeds immediately; otherwise you'll get price/asset/recipient
    back, so you can retry with payment_header set to your signed
    X-PAYMENT-equivalent payload (fresh nonce required on the retry —
    each call is independently signed).

Input parameters:

- `nonce` (string, required)
- `payment_header`
- `public_key` (string, required)
- `signature` (string, required)
- `text` (string, required)
- `timestamp` (string, required)

### `validate_directive` (~84 tokens)

Free dry-run: parse+book text against your full history without
    persisting or charging anything. Still requires a valid signature
    (identity/replay protection is not a billing concern).

Input parameters:

- `nonce` (string, required)
- `public_key` (string, required)
- `signature` (string, required)
- `text` (string, required)
- `timestamp` (string, required)

### `submit_batch` (~127 tokens)

Submit up to 1000 directives atomically — all persist together or
    none do. Priced 10x a single write, regardless of batch size within
    the cap. Always paid — the free-trial allowance (see
    submit_directive) applies to single writes only, never to batches,
    even if you haven't used any free writes yet. Paid.

Input parameters:

- `directives` (array, required)
- `nonce` (string, required)
- `payment_header`
- `public_key` (string, required)
- `signature` (string, required)
- `timestamp` (string, required)

### `list_directives` (~138 tokens)

List raw directives (optionally filtered by account/date range). No
    booking involved — cheapest paid tool. `since`/`until` are ISO date
    strings (YYYY-MM-DD). Your first 2 calls per registered key are free
    (independent of the write/accounts/report allowances — see
    list_accounts, get_balance_sheet).

Input parameters:

- `account`
- `limit` (integer)
- `nonce` (string, required)
- `payment_header`
- `public_key` (string, required)
- `signature` (string, required)
- `since`
- `timestamp` (string, required)
- `until`

### `list_accounts` (~94 tokens)

List all opened accounts with their currency constraints and
    booking method. No booking pass involved. Your first 2 calls per
    registered key are free (a separate allowance from list_directives'
    and the report tier's — see those tools).

Input parameters:

- `nonce` (string, required)
- `payment_header`
- `public_key` (string, required)
- `signature` (string, required)
- `timestamp` (string, required)

### `get_account_balance` (~159 tokens)

Balance of a single account. Settles at the same fixed price
    whether the account exists or not — an "unknown account" answer is
    still a valid, billable response (no per-error pricing discount). No
    free-trial allowance for this specific tool, unlike list_directives
    (same price, but list_directives has 2 free calls and this doesn't) —
    the free tier applies to browsing (list_directives, list_accounts)
    and the report tier, not per-account lookups.

Input parameters:

- `account` (string, required)
- `nonce` (string, required)
- `payment_header`
- `public_key` (string, required)
- `signature` (string, required)
- `timestamp` (string, required)

### `export_ledger` (~118 tokens)

Export the full ledger as literal Beancount text — a portable
    snapshot for fava/bean-report/etc., not the live store. Shares a
    combined free allowance of 2 with get_balance_sheet,
    get_income_statement, and get_trial_balance (the "report tier") — not
    2 free calls for each of those four separately.

Input parameters:

- `nonce` (string, required)
- `payment_header`
- `public_key` (string, required)
- `signature` (string, required)
- `timestamp` (string, required)

### `get_balance_sheet` (~110 tokens)

Full realize() balance sheet — often served from cache. Settles at
    the same fixed price regardless of cache hit/miss. Shares a combined
    free allowance of 2 with export_ledger, get_income_statement, and
    get_trial_balance (the "report tier") — not 2 free calls each.

Input parameters:

- `nonce` (string, required)
- `payment_header`
- `public_key` (string, required)
- `signature` (string, required)
- `timestamp` (string, required)

### `get_income_statement` (~147 tokens)

Income statement, period-scoped by since/until (ISO date strings,
    both optional — omitted means whole history). Always books full
    history first, then clamps the output to the requested period (never
    filters input dates — see reports.py for why). Shares a combined free
    allowance of 2 with export_ledger, get_balance_sheet, and
    get_trial_balance (the "report tier") — not 2 free calls each.

Input parameters:

- `nonce` (string, required)
- `payment_header`
- `public_key` (string, required)
- `signature` (string, required)
- `since`
- `timestamp` (string, required)
- `until`

### `get_trial_balance` (~119 tokens)

Trial balance, period-scoped same as income statement — same
    underlying compute, priced and audited as its own resource. Shares a
    combined free allowance of 2 with export_ledger, get_balance_sheet,
    and get_income_statement (the "report tier") — not 2 free calls
    each.

Input parameters:

- `nonce` (string, required)
- `payment_header`
- `public_key` (string, required)
- `signature` (string, required)
- `since`
- `timestamp` (string, required)
- `until`

### `register` (~81 tokens)

Generate a new Ed25519 keypair for ledger identity. Returns the
    private key exactly once — it is never stored server-side and cannot
    be recovered if lost. This is a SEPARATE keypair from whatever wallet
    you use to authorize x402 payments (payment auth and ledger identity
    are two independent signing domains — see payments.py).

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/dev-journalize-journalize/journalize#diagnostics

## Score history

- 2026-08-03: 53
- 2026-08-02: 52
- 2026-08-01: 52
- 2026-07-31: 51
- 2026-07-30: 50
- 2026-07-29: 50
- 2026-07-28: 49
- 2026-07-27: 48
- 2026-07-26: 48

## Links

- Remote endpoint: https://journalize.dev/mcp
- Website: https://journalize.dev/
- Changelog RSS feed: https://verifymcp.io/servers/dev-journalize-journalize/journalize/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/dev-journalize-journalize/journalize/changelog.json
- HTML version of this page: https://verifymcp.io/servers/dev-journalize-journalize/journalize
