Skip to main content
Glama

baconservices-mcp

An MCP server that lets an AI agent buy image work from Bacon Services, one call at a time, paid in USDC on Base over x402 from your own wallet, within spending limits you set. There's no account and no API key: the agent calls a tool, the server checks the price against your limits, signs a USDC payment for exactly that price, and returns the result.

Also listed in the MCP Registry as io.github.afmontoya/baconservices-mcp.

Wallet safety

Your wallet private key stays on your machine. Bacon Services never receives or stores it. Payments are signed locally and are subject to configurable per-call, session, and daily spending limits.

Related MCP server: x402tools MCP Server

What it sells

Tool

Does

Price (2026-10-17)

remove_background

Removes the background from one photo; returns a transparent PNG at the photo's size

0.20 USDC

optimize_image

Resizes so the longest side ≤ max_width (64–4096, default 1600) and encodes WebP at quality (40–95, default 80)

0.01 USDC

image_palette

The colours one image is mostly made of, as JSON: up to count (1–12, default 6) hex colours with their share, include_neutrals (default true)

0.01 USDC

brand_from_url

Reads one public web page (url) and returns its brand as JSON: name, description, logo URLs, colours, fonts, social profiles. No JavaScript runs; robots.txt is respected

0.03 USDC

Image tools take PNG, JPEG or WebP up to 8 MB, as image_url (public https) or image_path (a local file). remove_background and optimize_image return a signed download link (valid 24 hours); image_palette and brand_from_url return their JSON result in the tool result. Add save_to to write either kind to disk. Prices come from Bacon's live catalog, and each paid tool states its current price in its description.

image_palette and brand_from_url appear once Bacon's catalog publishes them with contract versions. A service the installed package doesn't understand is listed by list_services but can't be called until you update the package.

Free tools:

  • list_services: everything Bacon sells right now, with prices, limits, and whether this version of the package can run it.

  • quote: Bacon's current price for one service, and whether your limits and wallet allow it. Nothing is signed.

  • wallet_status: network, whether a wallet is configured, your limits and what's left of them, and whether you can afford each service (yes/no).

Before you start

  1. Node.js 20 or newer.

  2. A dedicated wallet holding only what you're willing to spend. Fund it with USDC on Base. You don't need ETH: x402 payments are signed authorizations (EIP-3009), and the facilitator pays the gas.

  3. Put the private key in a file that only you can read, for example ~/.bacon/buyer.key. Pointing BACON_WALLET_KEY_FILE at that file keeps the key out of MCP host configs, which are often synced or shared. BACON_WALLET_PRIVATE_KEY also works.

The key never leaves your machine. Only signatures are sent, and only to Bacon. The key is never logged, never written to the spend ledger, and never accepted as a tool argument.

Install

Claude Code

claude mcp add bacon -e BACON_WALLET_KEY_FILE=/home/you/.bacon/buyer.key -- npx -y baconservices-mcp

Add more -e NAME=value pairs for the limits below. Check it with claude mcp list.

Claude Desktop

Settings → Developer → Edit Config (claude_desktop_config.json):

{
  "mcpServers": {
    "bacon": {
      "command": "npx",
      "args": ["-y", "baconservices-mcp"],
      "env": {
        "BACON_WALLET_KEY_FILE": "/Users/you/.bacon/buyer.key",
        "BACON_MAX_PER_CALL": "0.50",
        "BACON_MAX_PER_SESSION": "1.00",
        "BACON_MAX_PER_DAY": "5.00"
      }
    }
  }
}

On Windows, if npx isn't found, use "command": "cmd" with "args": ["/c", "npx", "-y", "baconservices-mcp"], and write paths as "C:\\Users\\you\\.bacon\\buyer.key". Restart Claude Desktop afterwards.

Cursor, Windsurf and other clients with an mcpServers file

Use the same command / args / env block as Claude Desktop (for Cursor: ~/.cursor/mcp.json or .cursor/mcp.json in a project).

VS Code (.vscode/mcp.json)

VS Code can prompt for the key once and store it securely:

{
  "inputs": [
    { "type": "promptString", "id": "bacon-key", "description": "Bacon buyer wallet private key", "password": true }
  ],
  "servers": {
    "bacon": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "baconservices-mcp"],
      "env": { "BACON_WALLET_PRIVATE_KEY": "${input:bacon-key}" }
    }
  }
}

Any other MCP client

It's a stdio server: run npx -y baconservices-mcp with the environment below.

Configuration

Variable

Default

Meaning

BACON_WALLET_KEY_FILE

—

Path to a file containing the buyer wallet's private key.

BACON_WALLET_PRIVATE_KEY

—

The key itself (set only one of the two). Without either, the free tools still work.

BACON_MAX_PER_CALL

0.50

Largest single payment, in USDC.

BACON_MAX_PER_SESSION

1.00

Most this server process may spend.

BACON_MAX_PER_DAY

5.00

Most spent in any rolling 24 hours, across all processes and restarts.

BACON_CONFIRM

auto

auto: ask before each payment when the host can; always: refuse to pay when it can't; never: don't ask (for unattended agents; the limits still apply).

BACON_NETWORK

base

base (real USDC, baconservices.com) or base-sepolia (test USDC, a test copy of Bacon).

BACON_API_URL

—

Only with base-sepolia: the test copy's address.

BACON_PAY_TO

—

Only with base-sepolia: the test copy's receiving address.

BACON_RPC_URL

https://mainnet.base.org

RPC used to check your USDC balance before paying.

BACON_LEDGER_DIR

~/.baconservices-mcp

Where the spend ledger lives.

BACON_DISCLOSE_BALANCE

false

true adds the exact balance and the wallet address to wallet_status.

How your money is protected

All of these checks happen before anything is signed:

  • The price is Bacon's own. Bacon answers each request with an x402 402 that names the price. The server pays only if that price equals Bacon's live catalog price, for that exact endpoint, in Base USDC, to Bacon's receiving address (which is pinned in the package). If any of these can't be verified, it doesn't pay.

  • Your limits. It checks the per-call limit, an optional max_price_usdc on the call, the per-session limit, and the 24-hour limit. The 24-hour total is kept in a local ledger file shared by every process, so restarting the MCP server or running it twice doesn't open a new budget. If the ledger can't be read, nothing is paid. The x402 library's own per-payment cap is set to your per-call limit as a second lock.

  • Funds. It reads your USDC balance first. If it's too low, or the balance can't be read, you get a plain message and nothing is signed.

  • Your approval, where possible. If the MCP host supports it, you're asked "Pay 0.2 USDC on Base to Bacon Services to run remove_background?" Not every host can ask, so the limits are the real boundary.

  • No double payments. Each purchase signs one payment for one request. If the connection drops, the server resends that same signed payment once (Bacon answers a repeat with the same result) and never signs a new one. Asking for the same thing again within 10 minutes returns the earlier result for free, unless you pass allow_repeat: true.

  • Only known services run. New services in Bacon's catalog show up in list_services. They become callable tools only once a version of this package that understands their contract (inputs, outputs, version) is installed.

If Bacon refuses a payment before taking it, the result says "You have not been charged" and the amount goes back to your limits. If the outcome is unknown (for example the connection was lost twice), the result says so and gives Bacon's request id. That amount keeps counting against your limits.

Test money

Production Bacon sells only for real USDC. To try things without real money, run against a local or test copy of Bacon that sells on Base Sepolia:

BACON_NETWORK=base-sepolia BACON_API_URL=http://127.0.0.1:8000 BACON_PAY_TO=0xYourTestPayTo npx -y baconservices-mcp

The package refuses mismatched setups and pays nothing in each case: test money pointed at baconservices.com, real money pointed anywhere else, or a Bacon whose catalog is on a different network.

Develop

npm install
npm test

The tests run against a fake Bacon that checks every payment signature for real. Nothing reaches a network.

Hosted services

This MCP client is open source under the MIT License. Bacon Services' hosted APIs, Agent Commerce services, x402-paid capabilities, infrastructure, and backend implementations are separate services and are not licensed under the MIT License. Use of Bacon Services' hosted APIs and x402 services is governed by the Bacon Services terms.

Trademark notice

The MIT License applies to the source code in this repository only. "Bacon Services," the Bacon Services name, logos, and associated branding are not licensed under the MIT License. No permission is granted to use Bacon Services trademarks, logos, or branding in a way that suggests endorsement, sponsorship, or affiliation. See TRADEMARKS.md.

License

MIT. See LICENSE.

Available Tools

7 tools
brand_from_urlBrand from URLA

Reads one public web page and returns the brand it publishes about itself, as JSON: name, description, logo image URLs, colours, fonts and social profiles. No JavaScript runs; robots.txt is respected. Costs 0.03 USDC per call (real money) on Base, paid from the buyer's wallet over x402 after the buyer's spending limits are checked. Give url: one public web page (http or https, standard ports). Output: JSON, returned in the tool result.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoA public web page, usually the homepage.
save_toNoOptional local file path to save the result to (JSON).
overwriteNoReplace save_to if it exists. Default false.
allow_repeatNoBuy again even if the same request was bought in the last 10 minutes. Default false: the earlier result is returned and nothing is charged.
max_price_usdcNoOptional: refuse if Bacon asks more than this, in USDC.

TDQS

A4.5/5.0
Behavior5/5

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

Discloses behavior the annotations cannot: a real 0.03 USDC charge per call on Base, paid via x402 from the buyer's wallet only after spending limits are checked, plus the repeat-purchase caching rule (allow_repeat=false returns the earlier result and charges nothing). It also states no JS execution and robots.txt compliance. Nothing here conflicts with readOnlyHint=false / destructiveHint=false / idempotentHint=false.

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-loads what the tool returns, then cost/safety behavior, then the single required input, then output placement. Dense but every sentence carries information; the only slight redundancy is restating that the result is JSON in both the first and last sentence.

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?

With no output schema, the description correctly spells out the return shape, and it covers pricing, caching and input eligibility. It stops short of failure behavior an agent would want — what happens when the page is unreachable, not HTML, or the wallet/price check fails, and how max_price_usdc and the save_to/overwrite options interact with a paid call.

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 schema already documents all five parameters and the baseline would be 3. The description adds value beyond it by pinning the url contract (public page, http or https, standard ports) and by explaining the practical consequence of allow_repeat in money terms, which the schema only states mechanically.

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?

Names a specific verb and resource (reads one public web page, returns the brand it publishes about itself) and enumerates the exact return fields: name, description, logo image URLs, colours, fonts, social profiles. That is enough to separate it from siblings like image_palette (which extracts colours from an image) or quote (which prices a call).

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

Usage Guidelines4/5

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

Gives concrete applicability conditions: the target must be a public page over http/https on standard ports, no JavaScript is executed, and robots.txt is respected. It never names an alternative sibling tool or states a when-not, but the input constraints effectively communicate where the tool will and won't work.

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

image_paletteImage paletteA

Returns the colours one image is mostly made of, as JSON: up to count colours, most common first, each a hex value with its share of the image and whether it is a neutral. Costs 0.01 USDC per call (real money) on Base, paid from the buyer's wallet over x402 after the buyer's spending limits are checked. Input: PNG, JPEG, WEBP, up to 8 MB, at most 4096 px. Give exactly one of image_url or image_path. Output: JSON, returned in the tool result.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoThe most colours to return.
save_toNoOptional local file path to save the result to (JSON).
image_urlNoA public https URL of the image.
overwriteNoReplace save_to if it exists. Default false.
image_pathNoA local image file to send (read by this server, sent base64).
allow_repeatNoBuy again even if the same request was bought in the last 10 minutes. Default false: the earlier result is returned and nothing is charged.
max_price_usdcNoOptional: refuse if Bacon asks more than this, in USDC.
include_neutralsNoCount near-whites, near-blacks and greys too.

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: a fixed 0.01 USDC real-money charge on Base, the x402 payment path, that spending limits are checked before charging, accepted formats and size/pixel caps, and the 10-minute dedup behavior that returns a prior result without charging. This also explains why readOnlyHint is false for a non-mutating tool.

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

Conciseness5/5

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

Front-loaded with the purpose, then cost, then input constraints, then output format. Four dense sentences with no filler; each clause carries a fact the agent needs.

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 no output schema, the description still tells the agent what comes back (JSON with hex values, share, neutral flag), how it is delivered (tool result), what the call costs, and the input constraints. Nothing an agent needs to invoke it 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 description coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: the returned colours are the most common first, capped by count, and each carries its share and a neutral flag, which ties the output back to include_neutrals. That is modest but real added value over the schema.

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 ('Returns the colours one image is mostly made of'), and the schema/description together make it clearly distinct from sibling image tools like remove_background, optimize_image and brand_from_url. An agent can tell what this tool produces without inspecting anything else.

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

Usage Guidelines3/5

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

It gives operational constraints ('Give exactly one of image_url or image_path') and discloses cost, but never says when to prefer this tool over siblings or in what scenario it is appropriate. Usage is implied by the description of what it returns rather than explicitly guided.

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

list_servicesA

Lists what Bacon Services sells to agents right now, from its live catalog: each service's price in USDC, network, output, input limits, and whether this installed package can run it (and as which tool). Free.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations the description carries the full burden, and it does disclose useful behavior: the listing is free, live/current, and reports per-installed-package runnability. It stops short of stating read-only nature or any freshness/pagination caveats, but for a zero-param listing the safety profile is unambiguous and the cost disclosure adds real value.

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

Conciseness5/5

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

A single dense sentence, front-loaded with the verb and resource, with every clause (price, network, output, limits, runnability, free) carrying distinct information. No filler.

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 no output schema, the description compensates by enumerating the returned fields (price in USDC, network, output, input limits, tool mapping) and the cost. For a simple discovery tool with no inputs, this is sufficient for an agent to call and interpret 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?

The tool takes zero parameters and the schema describes none, so there is nothing for the description to clarify. Baseline of 4 applies per the no-parameter rule.

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 (Lists) and resource (Bacon Services catalog) and enumerates exactly what each entry contains: USDC price, network, output, input limits, and runnability. The mention of 'as which tool' implicitly ties entries back to the sibling tools, so an agent can distinguish it from quote or the task-specific siblings.

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

Usage Guidelines3/5

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

The catalog-discovery intent is implied ('Lists what Bacon Services sells... right now'), and 'Free' hints at a cost-free probe, but there is no explicit 'use this before X' or named alternative. The agent must infer that this is the entry point for discovering available services.

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

optimize_imageOptimize image for the webA

Resizes one image so its longest side is at most max_width pixels (never enlarging it) and encodes it as WebP at the given quality. Transparency is kept; metadata is not carried over. Costs 0.01 USDC per call (real money) on Base, paid from the buyer's wallet over x402 after the buyer's spending limits are checked. Input: PNG, JPEG, WEBP, up to 8 MB, at most 8000 px. Give exactly one of image_url or image_path. Output: image/webp, as a download link (and a file with save_to).

ParametersJSON Schema
NameRequiredDescriptionDefault
qualityNoWebP quality.
save_toNoOptional local file path to save the result to (image/webp).
image_urlNoA public https URL of the image.
max_widthNoLongest side of the output, in pixels.
overwriteNoReplace save_to if it exists. Default false.
image_pathNoA local image file to send (read by this server, sent base64).
allow_repeatNoBuy again even if the same request was bought in the last 10 minutes. Default false: the earlier result is returned and nothing is charged.
max_price_usdcNoOptional: refuse if Bacon asks more than this, in USDC.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, idempotentHint=false, openWorldHint=true), the description discloses the paid x402 flow, that spending limits are checked before charge, the exact price, that metadata is dropped, that transparency is preserved, and that images are never upscaled. These are material behaviors an agent cannot infer from the schema or annotations.

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 core operation is front-loaded in the first sentence, followed by cost, constraints, and output. It is dense but every clause carries load; the single run-on paragraph with mixed input/output/cost facts costs it a point on structure.

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 an 8-parameter, no-output-schema tool this covers what an agent needs: accepted formats, size and pixel limits, required parameter exclusivity, output MIME type and delivery mode, and the payment model. Nothing essential for correct invocation 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 adds meaning the schema does not: the mutual exclusivity constraint 'give exactly one of image_url or image_path', the never-enlarge semantics of max_width, and the download-link/save_to output pairing. It does not clarify quality or max_price_usdc behavior beyond what the schema already says.

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 states a precise verb, resource and transformation: resize so the longest side is at most max_width (never enlarging) and re-encode as WebP at the given quality. This is clearly distinguishable from siblings like remove_background, brand_from_url, and image_palette, which perform different image operations.

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

Usage Guidelines4/5

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

It gives strong context for deciding to call it: real-money cost of 0.01 USDC, accepted input formats and size limits, and the exactly-one-of image_url/image_path rule. It never names an alternative tool or an explicit 'do not use this when' condition, so it stops short of full routing guidance.

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

quoteA

Gets Bacon's current price for one service without paying, and says whether your spending limits and wallet allow it. Free; nothing is signed.

ParametersJSON Schema
NameRequiredDescriptionDefault
serviceYesA tool name (e.g. remove_background) or service id (e.g. remove-background).

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does well: it discloses that it is free, that nothing is signed, and that it reports whether spending limits and wallet allow the call — real behavioral value beyond a bare 'quote'. It doesn't cover return format, but that is minor for a preview tool.

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

Conciseness5/5

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

Two short sentences, front-loaded with the verb and resource, then the key behavioral guarantees. Nothing wasted.

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?

For a single-param preview tool with no output schema or annotations, the description supplies the essential safety and eligibility context. Return-value detail is missing but not critical.

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 baseline is 3; the description adds that a 'service' is the target of the quote and ties it to the pricing check, reinforcing the schema's examples. No extra syntax detail, so not 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?

'Gets Bacon's current price for one service' names a specific verb and resource, and distinguishes it from siblings like wallet_status and remove_background by being explicitly a price query.

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

Usage Guidelines4/5

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

'without paying' and 'Free; nothing is signed' clarify the safe read context and implicitly distinguish it from the actual paid execution sibling tools. It doesn't name an alternative explicitly, but the when-to-use context is clear.

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

remove_backgroundRemove backgroundA

Removes the background from one photo and returns the subject on a transparent background as a PNG, at the photo's own size. Costs 0.2 USDC per call (real money) on Base, paid from the buyer's wallet over x402 after the buyer's spending limits are checked. Input: PNG, JPEG, WEBP, up to 8 MB, at most 4096 px. Give exactly one of image_url or image_path. Output: image/png, as a download link (and a file with save_to).

ParametersJSON Schema
NameRequiredDescriptionDefault
save_toNoOptional local file path to save the result to (image/png).
image_urlNoA public https URL of the image.
overwriteNoReplace save_to if it exists. Default false.
image_pathNoA local image file to send (read by this server, sent base64).
allow_repeatNoBuy again even if the same request was bought in the last 10 minutes. Default false: the earlier result is returned and nothing is charged.
max_price_usdcNoOptional: refuse if Bacon asks more than this, in USDC.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses a concrete 0.2 USDC real-money charge on Base via x402, that spending limits are enforced, that allow_repeat silently returns a prior result without charging, and that max_price_usdc can refuse the purchase. These are exactly the cost/auth side effects an agent needs before firing a non-readonly, non-idempotent call.

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

Conciseness5/5

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

Dense but front-loaded: purpose, then cost/payment, then input constraints, then output. Every clause carries information (cost, formats, size caps, exclusivity) and there is no filler.

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 no output schema, the description still specifies the return (image/png as a download link, plus a file when save_to is used) and covers payment, constraints, and dedupe behavior. An agent has everything needed to call this safely and interpret the result.

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 adds a constraint the schema does not encode: 'Give exactly one of image_url or image_path' (the schema shows zero required params and no oneOf). That mutual-exclusivity rule and the PNG/link vs save_to output distinction are genuine added meaning.

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 ('Removes the background from one photo') plus the exact result ('subject on a transparent background as a PNG, at the photo's own size'). It is trivially distinguishable from siblings like optimize_image or image_palette, which transform rather than cut out subjects.

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

Usage Guidelines4/5

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

Gives real operating context: cost per call, that payment is checked against spending limits, and that exactly one of image_url or image_path must be supplied. It does not, however, name an alternative tool or an explicit 'don't use this when...' condition.

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

wallet_statusA

Shows the payment network, whether a wallet is configured, your spending limits and what is left of them, and whether the wallet can afford each service (yes/no). Free. The exact balance is shown only if the buyer enabled BACON_DISCLOSE_BALANCE.

ParametersJSON Schema
NameRequiredDescriptionDefault
serviceNoOptional: only check this service.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It usefully discloses cost (free) and a non-obvious conditional behavior (balance hidden unless BACON_DISCLOSE_BALANCE is enabled), which explains a potentially confusing omission, but it says nothing about auth requirements, error behavior, or explicitly confirming it is a read-only operation.

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

Conciseness5/5

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

Three dense sentences, each carrying distinct information (reported fields, cost, conditional balance disclosure), with the most decision-relevant content front-loaded. No filler.

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?

With no output schema and no annotations, the description does the job of enumerating the returned signals, so an agent knows what to expect. It stops short of covering failure modes or permission requirements for a tool whose results depend on configuration state.

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?

One optional parameter with 100% schema description coverage, so the schema already documents the 'service' filter. The description adds only mild context by implying that omitting it checks affordability across all services; no format or syntax detail is added.

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 names a concrete verb-and-resource (shows wallet status) and enumerates exactly what is reported: payment network, configuration state, spending limits and remaining amounts, and per-service affordability. Siblings (quote, list_services, image tools) are unrelated domains, so no differentiation is needed and none is missing.

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

Usage Guidelines3/5

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

It implies a pre-flight use case by reporting whether the wallet can afford each service, and 'Free' tells the agent this check costs nothing, but it never states when to call this versus the sibling 'quote', nor any prerequisites. Usage is inferable rather than stated.

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. 7 tool updatesv0.1.0
    • First observedbrand_from_url
    • First observedimage_palette
    • First observedlist_services
    • First observedoptimize_image
    • First observedquote
    • First observedremove_background
    • First observedwallet_status

TDQS

A4.2/5.0

Scored across 7 tools

Disambiguation4/5

The three free tools (quote, list_services, wallet_status) are mostly distinct—catalog vs single-service price vs wallet limits—but quote and list_services both surface pricing and could occasionally be confused. The four paid service tools each target a clearly different operation (background removal, image resizing, brand extraction, palette extraction), so overlap is minimal.

Naming Consistency4/5

All names use snake_case, which is consistent. However, the convention mixes verb_noun (list_services, remove_background, optimize_image, brand_from_url) with noun phrases (quote, wallet_status, image_palette), a minor but noticeable deviation.

Tool Count5/5

Seven tools is well-scoped for a paid-services marketplace: three discovery/status tools plus four paid service tools. Each earns its place with no padding or obvious redundancy.

Completeness4/5

The surface covers the full buyer lifecycle—discover services, quote a single service, check wallet/limits, and execute paid services—which is solid for this domain. Minor gaps include no tool for funding/top-up, purchase history, or a generic fallback invocation, but core workflows are covered.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Provides AI agents with 10 pay-per-call utility tools (QR generation, DNS lookup, OCR, etc.) using USDC on Base via the x402 protocol, with agent's private key never leaving the agent.
    11
    36 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to make pay-as-you-go AI inference requests through x402 with automatic Solana USDC payments, no API keys or registration, while enforcing configurable spending limits.
    3
    466 npm
    1
    MIT No Attribution