get-free-content
Retrieve free content from Spine's Underground — including agent tools, Overflow pieces, and Memory Palace pieces. Content is delivered inline by specifying a product ID.
Instructions
Get free content or tool info from Spine's Underground. 13 free products: 3 agent tools, 2 Overflow pieces, 8 Memory Palace pieces. Content delivered inline.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | Product ID to retrieve (e.g. memory_threads, logic_bombs, pet_rock_lobster) |
Implementation Reference
- index.js:41-54 (schema)Input schema for the 'get-free-content' tool. Defines a required 'product_id' string parameter.
{ name: 'get-free-content', description: 'Get free content or tool info from Spine\'s Underground. 13 free products: 3 agent tools, 2 Overflow pieces, 8 Memory Palace pieces. Content delivered inline.', inputSchema: { type: 'object', properties: { product_id: { type: 'string', description: 'Product ID to retrieve (e.g. memory_threads, logic_bombs, pet_rock_lobster)', }, }, required: ['product_id'], }, }, - index.js:131-134 (handler)Handler for 'get-free-content'. Calls fetchJSON on /deliver/{product_id} and returns the content inline.
case 'get-free-content': { const data = await fetchJSON(`/deliver/${args.product_id}`); return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] }; } - index.js:26-101 (registration)Registration of all tools via ListToolsRequestSchema handler, including 'get-free-content' at line 42.
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: [ { name: 'browse-spines-underground', description: "Browse Spine's Underground catalog — 23 curated products from Underground Cultural District. 13 free, 10 paid ($1.99–$4.99 USDC on Base). Tools, poetry, philosophy, music theory, digital experiences.", inputSchema: { type: 'object', properties: { product_id: { type: 'string', description: 'Optional product ID for single product detail. Omit for full catalog.', }, }, }, }, { name: 'get-free-content', description: 'Get free content or tool info from Spine\'s Underground. 13 free products: 3 agent tools, 2 Overflow pieces, 8 Memory Palace pieces. Content delivered inline.', inputSchema: { type: 'object', properties: { product_id: { type: 'string', description: 'Product ID to retrieve (e.g. memory_threads, logic_bombs, pet_rock_lobster)', }, }, required: ['product_id'], }, }, { name: 'buy-from-spines-underground', description: 'Purchase paid content from Spine\'s Underground. Returns x402 payment challenge (HTTP 402) — pay USDC on Base to receive content inline. 10 paid products: $1.99–$4.99.', inputSchema: { type: 'object', properties: { product_id: { type: 'string', description: 'Product ID to purchase (e.g. philosophy_of_spine, field_songs, temple_dawn)', }, }, required: ['product_id'], }, }, { name: 'verify-receipt', description: "Verify a direct USDC payment and receive purchased content. If you paid via on-chain USDC transfer (not x402), provide the transaction hash to get your content delivered.", inputSchema: { type: 'object', properties: { product_id: { type: 'string', description: 'Product ID you purchased (e.g. existential_espresso, philosophy_of_spine)', }, tx_hash: { type: 'string', description: 'Transaction hash of your USDC payment on Base', }, }, required: ['product_id', 'tx_hash'], }, }, { name: 'search-spines-underground', description: "Search Spine's Underground catalog by keyword. Searches product names, descriptions, and shop names.", inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'Search term (e.g. "poetry", "philosophy", "music", "memory")', }, }, required: ['query'], }, }, ], - index.js:106-118 (helper)Helper function fetchJSON used by the handler to make HTTP requests to the API.
async function fetchJSON(path) { const res = await fetch(`${API_BASE}${path}`); if (res.status === 402) { const paymentHeader = res.headers.get('PAYMENT-REQUIRED'); return { status: 402, message: 'Payment required. This product costs USDC on Base via x402 protocol.', payment_challenge: paymentHeader, instructions: 'Decode the PAYMENT-REQUIRED header (base64 JSON) to get payment details. Sign a USDC transfer and re-request with PAYMENT-SIGNATURE header.', }; } return res.json(); }