Skip to main content
Glama

joules_balance

Your own wallet balance — a FREE read either way (checking costs nothing). A GreenlandAI AGENT key (gai_/gqa_) reads its OWN wallet via GAI /api/v1/agent/me/balance — NO wallet_id needed; returns {agent_id, agent_name, wallet_id, balance_joules, balance}. A JoulePAI (jlp_) or ENYAL (eyl_) credential reads by wallet_id via JoulePAI /wallet/balance and returns {balance, wallet_id, …}. (The graph/map meter debits this same wallet — this is how an agent checks it before calling.)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
wallet_idNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idNoJoulePAI branch returns the wallet id here
handleNo
balanceNospendable joules; the field to act on
agent_idNo
wallet_idNo
agent_nameNo
owner_typeNo
balance_joulesNoGAI agent-branch name for the same figure
verification_statusNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "description": "joules_balance — the union of its two branches. GAI agent-key branch returns\n{agent_id, agent_name, wallet_id, balance_joules} (+ the `balance` shape-compat shim added by\nthis relay); the JoulePAI branch returns WalletOut, whose wallet id field is `id`, not\n`wallet_id`. Both are declared so either branch is structured. PII the JP branch may carry\n(email, bsv_address, signup_grant) is deliberately NOT declared — it still passes through as an\nextra, but it is not advertised in a schema that anonymous clients can enumerate.",
      +  "properties": {
      +    "agent_id": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Agent Id"
      +    },
      +    "agent_name": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Agent Name"
      +    },
      +    "balance": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "spendable joules; the field to act on",
      +      "title": "Balance"
      +    },
      +    "balance_joules": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "GAI agent-branch name for the same figure",
      +      "title": "Balance Joules"
      +    },
      +    "handle": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Handle"
      +    },
      +    "id": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "JoulePAI branch returns the wallet id here",
      +      "title": "Id"
      +    },
      +    "owner_type": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Owner Type"
      +    },
      +    "verification_status": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Verification Status"
      +    },
      +    "wallet_id": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Wallet Id"
      +    }
      +  },
      +  "title": "BalanceOut",
      +  "type": "object"
      +}
  2. Changed2 schema fields changed
    • addedInput schema / properties / wallet_id / default
      Added value: +null
    • removedInput schema / required
      Removed value: -[
      -  "wallet_id"
      -]
  3. First observed

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses that the operation is free/read-only, explains the two authentication paths, and notes the returned fields. It doesn't explicitly state failure modes or rate limits, but the free-read disclosure and endpoint details are strong behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-organized, front-loading the key fact (free read) and then explaining the two credential paths. Every sentence adds value, though the parenthetical about the graph/map meter could be seen as slightly tangential. Overall, it's efficient and informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema and only one optional parameter, the description covers the essential usage scenarios. It explains the two authentication modes, the endpoints, and the return fields. It doesn't mention error cases or what happens with an invalid wallet_id, but for a simple balance-check tool, the coverage is strong.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the only parameter (wallet_id) has no description in the schema. The tool description compensates by explaining when wallet_id is needed (JoulePAI/ENYAL credentials) and when it is not (agent keys). It doesn't describe the exact format of wallet_id, but the conditional usage is clearly explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads a wallet balance, distinguishes between two credential types (GreenlandAI agent key vs JoulePAI/ENYAL), and specifies the exact endpoints and return shapes. It names the resource (wallet balance) and the verb (reads/checks), making it unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains when to use this tool: an agent checks its own wallet before calling graph/map meter operations. It also clarifies that no wallet_id is needed for agent keys, while JoulePAI/ENYAL credentials require wallet_id. This provides clear context and differentiates from sibling tools like wallet_transfer and joules_deficit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources