← Marketplace
Base
Lemon-agent
Lemon-agent is an x402-native service at https://toolshed.lemon-agent.dev, indexed from the x402 Bazaar (Coinbase's public discovery directory). It charges callers itself in USDC on Base and is paid directly at its own wallet; Monex Protocol passes your request and payment headers through untouched. 12 endpoints listed.
Offers
| Offer | Endpoint | Price |
|---|---|---|
Convert Csv Yaml CSV to YAML. POST a CSV file with a header row; the response is block-style YAML — a list of maps, one per data row. Parsed to RFC 4180, so quoted commas and embedded newlines survive. Every value stays a string: no type guessing, which is what keeps leading zeros and long ids intact. | /m/bz-toolshed-lemon-agent-dev/convert/csv-yaml | 0.002 USDC |
Convert Frontmatter Json Markdown frontmatter to JSON. POST a Markdown file that begins with a --- fence; the response is {"data": the parsed YAML frontmatter, "content": the body returned byte for byte}. A file with no opening fence is refused rather than reported as having no metadata, because a mistyped fence should not look like an empty one. | /m/bz-toolshed-lemon-agent-dev/convert/frontmatter-json | 0.004 USDC |
Convert Html Json HTML tables to JSON. POST an HTML page; the response is {"tables": [{caption, columns, rows}]} — every <table> read into row objects keyed by its header cells, in the same shape whether the page has one table or nine. Values stay strings with whitespace collapsed. colspan and rowspan are NOT expanded, and a page with no table is refused. | /m/bz-toolshed-lemon-agent-dev/convert/html-json | 0.006 USDC |
Convert Html Text HTML to readable plain text. POST an HTML file; the response is its prose. The page is parsed with a real DOM, so script, style, noscript, nav, header, footer and aside are dropped WITH their contents, block elements become paragraph breaks, and <pre> is preserved verbatim. Links become their text, not their URL. | /m/bz-toolshed-lemon-agent-dev/convert/html-text | 0.006 USDC |
Convert Json Ndjson JSON array to NDJSON. POST a JSON array; the response is one compact JSON value per line — the shape streaming loaders, log shippers and jq pipelines take. A non-array input is refused rather than emitted as a stream of one, because that is the mistake this endpoint exists to catch. | /m/bz-toolshed-lemon-agent-dev/convert/json-ndjson | 0.002 USDC |
Convert Json Toml JSON to TOML. POST a JSON object; the response is a TOML document. The root must be an object, because TOML's root is a table, and a null anywhere in the document is refused — TOML has no spelling for one. Both are errors rather than a file that quietly parses to something you did not write. | /m/bz-toolshed-lemon-agent-dev/convert/json-toml | 0.004 USDC |
Convert Markdown Json Markdown to a JSON token tree. POST Markdown; the response is {"toc": [{depth, text}], "tokens": [...]} — the marked lexer's token stream plus a table of contents derived from the real headings. The document's structure without rendering it to HTML and parsing that back. A bold line pretending to be a heading was never structure and is not in the toc. | /m/bz-toolshed-lemon-agent-dev/convert/markdown-json | 0.004 USDC |
Convert Ndjson Json NDJSON to a JSON array. POST newline-delimited JSON; the response is a pretty-printed array of the parsed values. Blank lines are skipped and a line that does not parse is refused naming the 1-based line number — which is the reason to run a parser over a log file instead of wrapping it in brackets. | /m/bz-toolshed-lemon-agent-dev/convert/ndjson-json | 0.002 USDC |
Convert Srt Vtt SubRip to WebVTT. POST an .srt file; the response is a .vtt file — a WEBVTT header and timestamps written with a decimal point instead of a comma. Cue numbers are kept as WebVTT cue identifiers and caption text is passed through untouched, so a comma inside a line of dialogue is not mistaken for a timestamp separator. | /m/bz-toolshed-lemon-agent-dev/convert/srt-vtt | 0.002 USDC |
Convert Toml Json TOML to JSON. POST a TOML document; the response is pretty-printed JSON. A conforming parser handles the parts hand-rolled readers get wrong — dotted keys, arrays of tables, offset date-times. Dates become ISO-8601 strings and comments are dropped, because JSON has neither; this is a read path, not a round trip. | /m/bz-toolshed-lemon-agent-dev/convert/toml-json | 0.004 USDC |
Convert Vtt Srt WebVTT to SubRip. POST a .vtt file; the response is an .srt file. Cues are renumbered from 1 and hour-less timestamps are expanded to hh:mm:ss,mmm. The WEBVTT header, NOTE/STYLE/REGION blocks and per-cue settings are dropped, because SubRip cannot express them. Input that does not begin with WEBVTT is refused. | /m/bz-toolshed-lemon-agent-dev/convert/vtt-srt | 0.002 USDC |
Convert Xml Json XML to JSON. POST an XML document; the response is JSON in fast-xml-parser's convention — attributes prefixed @_, text content under #text, and repeated sibling elements collapsed into an array (so an element appearing once is an object and twice is an array). Values stay strings; no type guessing. A document carrying a <!DOCTYPE> is refused, because internal entities are an expansion attack. | /m/bz-toolshed-lemon-agent-dev/convert/xml-json | 0.006 USDC |
Machine-readable: openapi.json with x-payment-info offers.
Try it live
Run the full MPP flow from your browser: catch the 402, sign the payment with your wallet, and watch it settle on-chain.
This merchant settles over the mppx rail; pay it from an agent with the snippet below.
Pay with an agent
Any MPP or x402-compatible client works. With mppx, payment is automatic:
import { Mppx, evm } from 'mppx/client'
import { privateKeyToAccount } from 'viem/accounts'
const mppx = Mppx.create({
methods: [evm({
account: privateKeyToAccount(process.env.KEY),
currencies: [evm.assets.base.USDC],
})],
})
const res = await mppx.fetch('https://api.meshgateway.co/m/bz-toolshed-lemon-agent-dev/convert/csv-yaml')
// 402 challenge signed and settled automatically; response includes Payment-ReceiptOr inspect the challenge yourself:
curl -i https://api.meshgateway.co/m/bz-toolshed-lemon-agent-dev/convert/csv-yaml # HTTP/1.1 402 Payment Required # WWW-Authenticate: Payment id="…", method="evm", intent="charge", …