Skip to main content
Glama

Server Details

Score a planned spend before an agent pays. Verdicts: approve, ask_human, or block.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 22 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Server Listing
SpendGate
ChatGPT
–
Claude
–

TDQS

A4.6/5.0

Scored across 4 tools

Disambiguation4/5

Each tool targets a distinct action (mint key, read quota, score spend, store allowlist) and the descriptions explicitly cross-reference when to use one over another. The only mild friction is that get_api_key and get_quota share a 'get_' prefix despite one being a write/mint and the other a read, but the descriptions resolve this clearly.

Naming Consistency5/5

All four tools use snake_case with a verb_noun structure: get_api_key, get_quota, score_spend, set_wallet_allowlist. The pattern is predictable and consistent throughout.

Tool Count5/5

Four tools is well-scoped for a focused spend-scoring service: one for key provisioning, one for quota reads, one for the core scoring action, and one for allowlist management. No tool feels redundant or filler.

Completeness4/5

The core lifecycle (mint key, check quota, score spend, set wallet allowlist) is covered, and the descriptions even clarify behavior across tiers. A minor gap is the absence of a key revocation/rotation tool, which is a real key-management limitation, though not critical to the primary scoring workflow.

Available Tools

4 tools
get_api_keyMint a free API keyAInspect

Mint one free sg_live_ key so later score_spend and get_quota calls use 1,000 scores per UTC day instead of the anonymous 100. Call once per agent when you will score often and have no stored key. Do not call every turn, do not mint again if you already stored the secret, and do not call just to read remaining scores (use get_quota). Returns the secret once as api_key, plus key_id, key_prefix, label, tier free, daily_limit, created_at, and note. Only a hash is stored, so the secret cannot be shown again. Keys do not expire and there is no revoke tool; a lost key stays valid, and an unknown or non-sg_live_ value later returns invalid_api_key. At most 20 mints per client per UTC day, then key_mint_limit and no new key. Minting is free and does not consume a score. Send the secret later as Authorization: Bearer or as api_key. label is an optional stored name and does not set a cap, a scope, or an expiry.

NameRequiredDescriptionDefault
labelNoOptional name stored with the key, up to 80 characters. Does not set a cap or an expiry. Keys do not expire.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only cover safety hints (non-readonly, non-idempotent); the description supplies the substantive traits: secret returned once and only a hash stored, no expiry, no revoke path, a 20-mints-per-client-per-day cap yielding key_mint_limit, invalid_api_key for unknown values, and that minting is free. Far exceeds the annotation bar.

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?

Front-loaded with the action and its purpose, then rules, then return shape, then edge cases – a sensible ordering. It is long for a one-parameter tool and repeats 'keys do not expire' from the schema, costing a point on economy.

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

Completeness5/5

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

Despite no output schema, the description enumerates the returned fields (api_key, key_id, key_prefix, label, tier, daily_limit, created_at, note) and covers auth transport, error codes, and the mint rate limit. Nothing needed to call or interpret the tool is missing.

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 100% on the single optional label param, so baseline is 3. The description goes slightly beyond by clarifying what label is not – no cap, no scope, no expiry – which pre-empts a plausible misuse of label as a quota control.

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?

States a specific verb+resource ('Mint one free sg_live_ key') and immediately frames the effect on siblings score_spend and get_quota. An agent can distinguish this from get_quota (read remaining scores) and score_spend without opening any schema.

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?

Explicit when-to-use ('Call once per agent when you will score often and have no stored key') and three explicit when-not-to conditions (not every turn, not if a secret is stored, not to read remaining scores – use get_quota). The alternative tool is named with the condition that selects it.

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

get_quotaRead today's free score quotaA
Read-onlyIdempotent
Inspect

Read today's free-score balance. Prefer this over score_spend when you are not judging a specific payment, including before a batch or after a 402: it does not consume a score, returns no verdict, and is never billed. Do not use it to approve or block a spend. Pass api_key for that sg_live_ key (tier free, 1,000/UTC day); omit it for this client's anonymous bucket (tier anonymous, 100/UTC day). An unrecognized or non-sg_live_ key returns invalid_api_key and does not fall back. Returns subject (anonymous|api_key|bundle), key_id, key_prefix, tier (anonymous|free|bundle), daily_limit, used_today, remaining_today, paid_today, price_usd, price_atomic, asset (USDC), network, resets_at (next UTC midnight), and paid_configured. Mint a higher cap with get_api_key.

NameRequiredDescriptionDefault
api_keyNoOptional sg_live_ key to read. Omit for the anonymous bucket. Does not mint a key. An unrecognized key returns invalid_api_key.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only cover safety/idempotency; the description adds the behavior that matters here: it consumes no score, returns no verdict, is never billed, and that an unrecognized or non-sg_live_ key returns invalid_api_key with no fallback. It also discloses tier caps (1,000 vs 100 per UTC day) and the next-midnight reset semantics.

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?

Purpose and sibling comparison are front-loaded, then parameter rules, then return fields. The returns enumeration is long, but with no output schema it earns its place; the prose is dense rather than padded.

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

Completeness5/5

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

For a single-optional-parameter read with no output schema, the description covers tuning inputs, failure modes, rate-limit tiers, and the full return shape. Nothing an agent needs to invoke or interpret this correctly is missing.

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 100%, so the baseline is 3, but the description goes further by tying api_key to the sg_live_ prefix, contrasting it with the anonymous bucket when omitted, and specifying the invalid_api_key failure mode. It adds real routing meaning beyond the schema's field description.

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?

States a specific verb and resource ('Read today's free-score balance') and immediately distinguishes itself from the sibling score_spend and from get_api_key (used to mint a higher cap). An agent can identify this as the non-billing, non-verdict quota read without opening any schema.

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?

Explicit routing: prefer this over score_spend when not judging a specific payment, including before a batch or after a 402, plus a clear exclusion ('Do not use it to approve or block a spend'). Both the when and the when-not are stated with the alternative named.

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

score_spendScore a planned spendAInspect

Score one planned payment before it is sent: a crypto transfer, gift card, subscription, or paid API or merchant. Do not use it for a pure read, or for a status_check under $1 you will not pay; that still burns a free score and approves unless a budget you pass is exceeded. Each call uses one free score (anonymous 100/UTC day, sg_live_ key 1,000 from get_api_key). Past that cap the call is HTTP 402 and costs 0.001 USDC on Base via x402. It does not pay the merchant. A domain, https URL, or 0x payee that is not on the local known-host list is checked with PayCheck. Trusted counts as a known merchant. Block means do not pay, including under the micro threshold. If PayCheck is unreachable, local merchant rules are used and the score still returns. While free quota remains, the same arguments consume another score. category overrides purpose. When category is omitted, purpose is matched as a category name; any other prose is unknown risk. merchant overrides endpoint when both are set. A set daily_budget_remaining or monthly_budget_remaining blocks when amount is greater; omitted budgets are skipped. Pass from_wallet, the 0x account that would sign or pay gas, whenever the spend leaves a wallet. Omit from_wallet and the verdict is unchanged. Pass allowed_wallets to allowlist this call, or omit it to use the list stored for the sg_live_ key by set_wallet_allowlist. An empty allowed_wallets array authorizes no wallet. Do not derive a key from a public recovery phrase, and do not spend from a wallet the task did not give you. A published Hardhat, Anvil, Ganache, BIP-39 test, or other public dev-mnemonic account is block with reason dev_wallet, including under $1, even if that address is allowlisted. A from_wallet that is not on the effective allowlist is block with reason unauthorized_wallet. A from_wallet with no allowlist on the call and none stored for the key is ask_human with reason wallet_unverified. Stop and ask a person. Do not broadcast. Returns score 0-100, verdict approve|ask_human|block, reasons, recommended_action, checked_at, payment_source (from_wallet, allowlisted, checked_at, reason, and signature only when the server already has BUNDLE_PROXY_SECRET), detail, and quota (daily_limit, used_today, remaining_today, paid_today, resets_at). approve means pay; ask_human means stop for a person; block means do not pay. Read the cap with get_quota instead of spending a score.

NameRequiredDescriptionDefault
amountYesPlanned spend in USD, not token atomic units. Required.
api_keyNoOptional sg_live_ key. Uses the 1,000/day bucket. An unrecognized key returns invalid_api_key instead of falling back to anonymous.
purposeNoShort note, max 280 characters. When category is omitted, this text is matched as a category name; other prose is unknown risk. When category is set, this is echoed and not scored.
agent_idNoAgent or key id. Echoed, not scored in v1.
categoryNoRisk class. Wins over purpose. One of status_check, api_call, saas, infra, gift_card, crypto_transfer, irreversible. Any other string is unknown risk.
currencyNoPayment currency. Defaults to USDC.
endpointNoPayee used only when merchant is omitted. Ignored if merchant is also set.
merchantNoPayee name or https URL. Used instead of endpoint when both are set. A missing payee is penalized.
risk_hintsNoSelf-reported hints. Raising: new_payee, new_merchant, first_payment, high_velocity, mismatched_purpose, off_platform, shared_wallet. Lowering: trusted_repeat, within_policy, human_preapproved. known_merchant marks the payee known.
from_walletNo0x account that would sign or pay gas. Omit to score as before, with no wallet verdict. A published Hardhat, Anvil, Ganache, or other public dev-mnemonic account is block, reason dev_wallet.
allowed_walletsNo0x addresses allowed to spend on this call. When set, including an empty array, this list is used instead of the stored per-key allowlist. Omit to use the list from set_wallet_allowlist.
daily_budget_remainingNoUSD left today. When set, a greater amount is blocked. Omit to skip this check.
monthly_budget_remainingNoUSD left this month. When set, a greater amount is blocked. Omit to skip this check.

TDQS

A4.5/5.0
Behavior5/5

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

With only generic annotations (readOnlyHint=false, idempotentHint=false), the description carries the real behavioral load and delivers: each call consumes one free score, anonymous 100/UTC-day vs sg_live_ 1,000/day, HTTP 402 past the cap with 0.001 USDC on Base via x402, and 'It does not pay the merchant.' It also discloses operational fallbacks (PayCheck unreachable -> local merchant rules), block reasons (dev_wallet, unauthorized_wallet), and the ask_human wallet_unverified path, none of which the annotations convey.

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

Conciseness3/5

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

Front-loaded correctly — purpose, exclusions, and quota cost come before the long tail of policy edge cases. However, it is roughly 400 words with real redundancy: the allowlist and dev-mnemonic rules are repeated from the schema descriptions, and quota/cost is restated in several places ('Each call uses one free score...', 'While free quota remains, the same arguments consume another score'). Tighter grouping would preserve the same information with fewer sentences.

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

Completeness5/5

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

With 13 parameters, no output schema, and only terse annotations, the description fills every gap an agent needs: the full return shape (score, verdict, reasons, recommended_action, payment_source, quota), the meaning of each verdict (approve/ask_human/block), and the quota fields. Nothing required to call it correctly or interpret the result is left to inference.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3 and the schema already documents all 13 parameters including from_wallet, allowed_wallets, budgets, and the merchant/endpoint precedence. The prose largely restates those rules rather than adding new syntax or formats, so it neither compensates nor extends meaningfully beyond the structured fields.

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 first sentence gives a precise verb+resource+scope: 'Score one planned payment before it is sent: a crypto transfer, gift card, subscription, or paid API or merchant.' It explicitly excludes the adjacent read case ('Do not use it for a pure read...') and names the sibling that answers quota questions ('Read the cap with get_quota'), so an agent can place it against get_api_key, get_quota, and set_wallet_allowlist without opening a schema.

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?

It states when to call (before sending a planned payment), when not to (pure reads, status_check under $1 you will not pay), and the alternative for the excluded need (get_quota). Precedence and override rules (category over purpose, merchant over endpoint, budgets blocking when set) are spelled out so the agent knows exactly which inputs change the verdict.

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

set_wallet_allowlistStore wallets this key may spend fromA
Idempotent
Inspect

Store the 0x wallets this sg_live_ key is allowed to spend from. Call it when an operator names those wallets, once, not on every spend, and not to approve a payment. score_spend still has to run before any transfer. A block or ask_human from score_spend means do not broadcast. Pass allowed_wallets. This replaces the stored list for that key in one write. An empty array stores an allowlist that authorizes no wallet, so a later score with from_wallet and no call-level list returns block, reason unauthorized_wallet. allowed_wallets is required. At most 32 addresses. A published developer test account (Hardhat/Anvil default accounts, Ganache, BIP-39 test, and other public test mnemonics) is rejected with dev_wallet and is not stored. Requires api_key, or Authorization: Bearer sg_live_. Anonymous and bundle callers cannot store a list; they can pass allowed_wallets on score_spend instead. An unrecognized key returns invalid_api_key. A missing key returns api_key_required. Does not consume a score and is never billed. Returns key_id, key_prefix, allowed_wallets, and updated_at. A new key starts with no list, which makes a later from_wallet ask_human with reason wallet_unverified until you set one. Do not put a private key or a recovery phrase in this tool. Addresses only.

NameRequiredDescriptionDefault
api_keyNosg_live_ key this list belongs to. You can also send Authorization: Bearer. Required. Anonymous callers cannot store a list.
allowed_walletsYes0x addresses this key may spend from. Replaces the stored list. An empty array authorizes none. Public developer test accounts are rejected and not stored.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations with replacement semantics ('replaces the stored list for that key in one write'), empty-array consequences ('stores an allowlist that authorizes no wallet' leading to reason unauthorized_wallet), dev-wallet rejection behavior, auth requirements, error codes, and billing ('does not consume a score and is never billed'). None of this is covered by readOnlyHint/idempotentHint/destructiveHint.

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?

Front-loaded with the core action and dense with operational detail, though a few sentences restate the schema ('allowed_wallets is required', 'an empty array stores...'). Long but nearly every sentence carries routing or safety value.

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

Completeness5/5

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

Given no output schema, the description enumerates the return fields (key_id, key_prefix, allowed_wallets, updated_at), covers auth paths, error responses, edge cases like new keys starting unset, and warns against passing private keys. An agent has everything needed to invoke it correctly.

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 description coverage is 100%, so the baseline is 3, but the description adds constraints the schema lacks: at most 32 addresses and the downstream block/unverified behavior for empty or unset lists. It repeats some schema content (empty array authorizes none), which keeps it from a 5.

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?

States a specific verb, resource, and scope: 'Store the 0x wallets this sg_live_ key is allowed to spend from.' It is immediately distinguishable from score_spend, get_api_key, and get_quota because it names the store-once semantics and explicitly says it is not for approving payments.

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?

Gives explicit when ('when an operator names those wallets, once, not on every spend'), when-not ('not to approve a payment'), the prerequisite ordering ('score_spend still has to run before any transfer'), and the alternative for anonymous/bundle callers ('pass allowed_wallets on score_spend instead').

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changedscore_spend2 fields changed
      • addedInput schema / properties / allowed_wallets
        Added value: +{
        +  "description": "0x addresses allowed to spend on this call. When set, including an empty array, this list is used instead of the stored per-key allowlist. Omit to use the list from set_wallet_allowlist.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / from_wallet
        Added value: +{
        +  "description": "0x account that would sign or pay gas. Omit to score as before, with no wallet verdict. A published Hardhat, Anvil, Ganache, or other public dev-mnemonic account is block, reason dev_wallet.",
        +  "type": "string"
        +}
    • Addedset_wallet_allowlist
  2. 3 tool updates
    • Changedget_api_key1 field changed
      • changedInput schema / properties / label / description
        Previous value: -"Optional label stored with the key, up to 80 characters."New value: +"Optional name stored with the key, up to 80 characters. Does not set a cap or an expiry. Keys do not expire."
    • Changedget_quota1 field changed
      • changedInput schema / properties / api_key / description
        Previous value: -"Optional sg_live_ key. Omit to read the anonymous quota for this client."New value: +"Optional sg_live_ key to read. Omit for the anonymous bucket. Does not mint a key. An unrecognized key returns invalid_api_key."
    • Changedscore_spend9 fields changed
      • changedInput schema / properties / agent_id / description
        Previous value: -"Your agent or key id. Echoed, not scored in v1."New value: +"Agent or key id. Echoed, not scored in v1."
      • changedInput schema / properties / amount / description
        Previous value: -"Planned spend in USD, not in token atomic units."New value: +"Planned spend in USD, not token atomic units. Required."
      • changedInput schema / properties / api_key / description
        Previous value: -"Optional SpendGate key (sg_live_…). Anonymous callers share a smaller daily cap."New value: +"Optional sg_live_ key. Uses the 1,000/day bucket. An unrecognized key returns invalid_api_key instead of falling back to anonymous."
      • changedInput schema / properties / category / description
        Previous value: -"One of status_check, api_call, saas, infra, gift_card, crypto_transfer, irreversible. Unknown categories are scored as unknown risk."New value: +"Risk class. Wins over purpose. One of status_check, api_call, saas, infra, gift_card, crypto_transfer, irreversible. Any other string is unknown risk."
      • changedInput schema / properties / daily_budget_remaining / description
        Previous value: -"USD still available today. Amount above this is blocked."New value: +"USD left today. When set, a greater amount is blocked. Omit to skip this check."
      • changedInput schema / properties / endpoint / description
        Previous value: -"Alias of merchant when the payee is an API URL."New value: +"Payee used only when merchant is omitted. Ignored if merchant is also set."
      • changedInput schema / properties / merchant / description
        Previous value: -"Merchant name or https endpoint URL that will receive the spend."New value: +"Payee name or https URL. Used instead of endpoint when both are set. A missing payee is penalized."
      • changedInput schema / properties / monthly_budget_remaining / description
        Previous value: -"USD still available this month. Amount above this is blocked."New value: +"USD left this month. When set, a greater amount is blocked. Omit to skip this check."
      • changedInput schema / properties / purpose / description
        Previous value: -"Short human description. Used as the category when category is omitted."New value: +"Short note, max 280 characters. When category is omitted, this text is matched as a category name; other prose is unknown risk. When category is set, this is echoed and not scored."
  3. 3 tool updates
    • First observedget_api_key
    • First observedget_quota
    • First observedscore_spend

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables AI assistants and agents to vet a stablecoin or x402 payment before it is sent, returning an approve, hold, or reject decision from instant rule checks and an optional locally-run risk model. Fails closed, so malformed input or an unreachable model yields a hold rather than an approval.
    4
    1,240 PyPI
    1
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    Deterministically evaluates whether a proposed agent spend action matches a supplied policy, returning ELIGIBLE, DENY, or STEP_UP with stable reason codes. Provides local policy evidence only, not payment authorization.
    1
    57 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to verify proposed payments against their assigned task, budgets, permitted categories, and counterparties, returning an ALLOW or DENY decision with a tamper-evident audit trail.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources