Observed since 20 Oct, 23:05 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
MCP server for Tab — give any LLM a credit line on Hedera. It holds no key.
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.
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:
@0xdivyanshh/tab-sdk verbs whenever the Agent Kit path
is confirmed, and nothing here has to be undone.// 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
| Tool | Moves money | What it answers |
|---|---|---|
tab_spend | yes | Pay a seller, up to a cap. Returns paid / refused / failed |
tab_quote | no | Would this be allowed? Reserves nothing |
tab_balance | no | Position: balance, outstanding, holds, available, ceiling |
tab_ceiling | no | The ceiling, what bound it, and the published inputs |
tab_receipts | no | Recent ledger entries from the HCS receipt topic |
tab_counterparties | no | Independence weights and the reason for each |
tab_health | no | Gateway 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.
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.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.@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.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.Download counts and popularity will appear here as the collector receives them.
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 23:05 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:08a03bc296eba7edc46c13d8e3698119cbd402a9d941fb9c06339009aa4e853f