Catalog npm
Back to packageRELEASE DETAILS

0.1.1

npm

@0xdivyanshh/tab-mcp

MCP server for Tab — give any LLM a credit line on Hedera. It holds no key.

Published13 Sept 2026
Direct dependencies5
Transitive dependenciesNot calculated

README

Current package documentation

@0xdivyanshh/tab-mcp

Tier 3 · MCP server

Tab's verbs as MCP tools, so an agent in any MCP-capable runtime can transact on a tab with no bespoke code. Seven tools; only tab_spend moves money.

The decision the old README left open — settled

It offered two options: a standalone server (this), or documentation for loading @0xdivyanshh/tab-agentkit-plugin into @hashgraph/hedera-agent-kit-mcp. Shipping option 1. Option 2 is the better ecosystem story and it is not the one to ship first:

  • It depends on two things that do not exist — the plugin is unwritten — plus an external server accepting third-party plugins in a shape nobody here has verified.
  • It cannot be driven by a judge in one step. This can: three lines of config and Claude Desktop is spending on a Hedera tab.
  • It is additive later. A plugin can wrap the same @0xdivyanshh/tab-sdk verbs whenever the Agent Kit path is confirmed, and nothing here has to be undone.

Use it

// claude_desktop_config.json  (or any MCP client)
{
  "mcpServers": {
    "tab": {
      "command": "node",
      "args": [
        "--experimental-strip-types",
        "/absolute/path/to/ethonline/packages/mcp/src/stdio.ts"
      ],
      "env": {
        "TAB_GATEWAY_URL": "http://localhost:8080",
        "TAB_ACCOUNT_ID": "0.0.10390398"
      }
    }
  }
}

Then ask the model things like "what can my tab afford?", "buy the forecast from this URL for at most 0.040000", or — the one worth trying — "why is my ceiling only 0.25?"

That last question is the point of the whole rail. It answers with the published arithmetic and the funding-graph evidence:

0.0.10385196  0%  BLOCKED
  COMMON_FUNDER: the same account funded both this counterparty and the agent's tab
  funded by 0.0.8812188 · tab funded by 0.0.8812188  ← SAME, which is what COMMON_FUNDER tests

Tools

ToolMoves moneyWhat it answers
tab_spendyesPay a seller, up to a cap. Returns paid / refused / failed
tab_quotenoWould this be allowed? Reserves nothing
tab_balancenoPosition: balance, outstanding, holds, available, ceiling
tab_ceilingnoThe ceiling, what bound it, and the published inputs
tab_receiptsnoRecent ledger entries from the HCS receipt topic
tab_counterpartiesnoIndependence weights and the reason for each
tab_healthnoGateway reachability, network, token, window

Every read tool is annotated readOnlyHint: true; tab_spend is destructiveHint: true and idempotentHint: false, so a client knows which one to confirm with a human.

Invariants

  • A refusal is a structured RESULT, not an error. isError: true makes a client surface a failure and invites a model to retry — and a CEILING_EXCEEDED retried immediately is refused again for the same reason. A refusal returns the rule, the evidence, and what to do instead, because choosing different work is the correct response and the agent can only choose it if it is told why. A failed outcome is an error, and hands back the hold id: infrastructure broke after the decision to spend, so nobody knows whether the seller was paid, and a retry with a new key would be a second payment.
  • No key material anywhere. McpConfig is a URL and a tab id; createTab has no parameter that would accept a key, and boundaries.json bars this package from @hiero-ledger/sdk. An MCP server runs on a user's machine inside a client the user did not write — the surface where a leaked key would hurt most, and so the one where the constraint is enforced rather than promised.
  • stdout is the protocol. A single stray console.log corrupts the JSON-RPC stream and the client reports a parse error rather than whatever actually went wrong. Every diagnostic goes to stderr.
  • Same verbs, same semantics as @0xdivyanshh/tab-sdk. Guidance text comes from @0xdivyanshh/tab-protocol, not from strings invented here, so an agent that learns the rail through MCP learns the same rail.
  • Fails at startup on a missing TAB_ACCOUNT_ID. A client shows a server as connected the moment the process is alive, so one that starts happily and then refuses every call looks like a broken rail rather than a missing variable.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 5

Native requirements
5 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
zod
Environment
{
  "local_name": "zod",
  "alias": false,
  "peer_metadata": null
}
^3.25.0runtime
@0xdivyanshh/tab-sdk
Environment
{
  "local_name": "@0xdivyanshh/tab-sdk",
  "alias": false,
  "peer_metadata": null
}
0.1.1runtime
@0xdivyanshh/tab-money
Environment
{
  "local_name": "@0xdivyanshh/tab-money",
  "alias": false,
  "peer_metadata": null
}
0.1.1runtime
@0xdivyanshh/tab-protocol
Environment
{
  "local_name": "@0xdivyanshh/tab-protocol",
  "alias": false,
  "peer_metadata": null
}
0.1.1runtime
@modelcontextprotocol/sdk
Environment
{
  "local_name": "@modelcontextprotocol/sdk",
  "alias": false,
  "peer_metadata": null
}
^1.13.0runtime

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "shasum": "63f138058488c392a391eace0066b9396c698b3e",
  "tarball": "https://registry.npmjs.org/@0xdivyanshh/tab-mcp/-/tab-mcp-0.1.1.tgz",
  "fileCount": 18,
  "integrity": "sha512-lMjnfetj0eeR6plPI3j4tXBL+6QPKXJEeKVSNksPSK5quGf45oRF8dqYJv8ski69aCTnKnXdB/9feGPrQNOXhw==",
  "signatures": [
    {
      "sig": "MEQCIDel8DDylPUad8O6FlIfl0rBrDezaZgTq883ZTC3ocWEAiAcOFsIjQ4tYm/8rJTdn+YzbOmOUQYihYYjCSgVFM7d4w==",
      "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
    }
  ],
  "unpackedSize": 39376
}

Repository

PENDING
0xnerd100/tab

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 23:05 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:d8e9bb12ebb268443cbe06fbb27680ed357fc9b00e82ef23ca93585692ee74af

Other collected versions

0.1.013 SeptView all collected versions →