{"apiVersion":"v1","directorySlug":"lid-mcp-b317fd4d4a","title":"Lid","description":"Store, challenges, campaigns. Everything you need to sell, in one place, and the money settles the second a result is real. 3% of what moves, $0 a month.","pageUrl":"https://www.mcpbundles.com/skills/lid-mcp-b317fd4d4a","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp.lid.pro/mcp","hostedMcpUrl":null,"toolCount":43,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"pro.lid/lid-mcp-b317fd4d4a","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"search_creators","description":"Search creators by username/bio/country. Returns up to 6 matches. Minimum 2 chars for query.","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string"},"tag":{"type":"string"},"limit":{"type":"integer"},"country":{"type":"string"},"includeStats":{"type":"boolean"}}},"logicalName":"search_creators","displayName":"search_creators","title":"search_creators","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_latest_creators","description":"Recently active creators. Default 10, max 20. Good for 'who's new' queries.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer"},"includeStats":{"type":"boolean"}}},"logicalName":"get_latest_creators","displayName":"get_latest_creators","title":"get_latest_creators","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_reviews_by_product","description":"Reviews and average rating for a product/NFT collection by contract address. Paginated.","inputSchema":{"type":"object","required":["addressProducto"],"properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"addressProducto":{"type":"string"}}},"logicalName":"get_reviews_by_product","displayName":"get_reviews_by_product","title":"get_reviews_by_product","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_affiliate_by_code","description":"Public lookup of an affiliation by its short code. Registers a click (side-effect). Returns the collection and affiliate wallet.","inputSchema":{"type":"object","required":["code"],"properties":{"code":{"type":"string"}}},"logicalName":"get_affiliate_by_code","displayName":"get_affiliate_by_code","title":"get_affiliate_by_code","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_solana_affiliate_earnings","description":"AffiliateEarning records + aggregates (total commission, sales count, withdrawals) for a Solana pubkey.","inputSchema":{"type":"object","required":["pubkey"],"properties":{"pubkey":{"type":"string"}}},"logicalName":"get_solana_affiliate_earnings","displayName":"get_solana_affiliate_earnings","title":"get_solana_affiliate_earnings","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"my_agent_wallet","description":"IDENTITY. Returns who this MCP API key acts as: userId, the user's real wallet (where revenue goes), and the custodial agent wallet (the on-chain `creator` used when creating products). Call this first to confirm the key is wired correctly.","inputSchema":{"type":"object","properties":{}},"logicalName":"my_agent_wallet","displayName":"my_agent_wallet","title":"my_agent_wallet","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_my_usage","description":"USAGE & LIMITS. Read-only status of this API key: whether MCP creation is globally enabled, creation caps (daily window and lifetime) with used/remaining counts and the daily reset time, plus the custodial agent wallet balances (SOL in lamports, USDC in atomic units). Checking it does NOT consume any quota. Call it before create_product/create_bounty to self-regulate instead of hitting limit errors.","inputSchema":{"type":"object","properties":{}},"logicalName":"get_my_usage","displayName":"get_my_usage","title":"get_my_usage","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_product","description":"WRITE. Create a new Lidpro product ON-CHAIN, custodially, with the FULL set of product attributes. The server signs as the agent wallet (creator) and the platform sponsor pays gas — the agent needs no Solana wallet. Revenue (royalties) is routed 100% to the key owner's real wallet. Only `name`, `priceUsdc` and `maxSupply` are required; everything else is optional. Returns productPda, productId, tx signature and explorer link. IMPORTANT: a PAID product with no `extraFiles` is created as a DRAFT (","inputSchema":{"type":"object","required":["name","priceUsdc","maxSupply"],"properties":{"name":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"symbol":{"type":"string"},"gallery":{"type":"array","items":{"type":"object"}},"customUrl":{"type":"string"},"maxSupply":{"type":"integer"},"priceUsdc":{"type":"string"},"baseLocale":{"type":"string"},"extraFiles":{"type":"array","items":{"type":"object"}},"ipfsImageCid":{"type":"string"},"translations":{"type":"object"},"saleStartTime":{"type":"integer"},"descriptionHtml":{"type":"string"},"ipfsMetadataUri":{"type":"string"},"metaDescription":{"type":"string"},"previewImageUrl":{"type":"string"},"affiliateEnabled":{"type":"boolean"},"creatorDisplayName":{"type":"string"},"secondaryRoyaltyBps":{"type":"integer"},"maxPurchasesPerWallet":{"type":"integer"},"affiliateCommissionBps":{"type":"integer"}}},"logicalName":"create_product","displayName":"create_product","title":"create_product","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"my_products","description":"List the products owned by the API key's user (created via MCP or otherwise). Returns productPda, name, price, supply and on-chain status.","inputSchema":{"type":"object","properties":{}},"logicalName":"my_products","displayName":"my_products","title":"my_products","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"affiliate_to_product","description":"WRITE. Affiliate the API key's user to an existing product so they earn commission promoting it. Off-chain (no signing). Returns the affiliate code + shareable /ref link. You cannot affiliate to your own product.","inputSchema":{"type":"object","required":["productPda"],"properties":{"productPda":{"type":"string"}}},"logicalName":"affiliate_to_product","displayName":"affiliate_to_product","title":"affiliate_to_product","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"my_affiliations","description":"List ALL the products the API key's user is affiliated to (the ones they promote), with each affiliate code, /ref link, clicks, conversions and earnings. Use to read the user's affiliations.","inputSchema":{"type":"object","properties":{}},"logicalName":"my_affiliations","displayName":"my_affiliations","title":"my_affiliations","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"my_analytics","description":"Read the API key user's analytics. perspective='creator' (sales, revenue, affiliates of my products) or 'affiliate' (commissions I earned promoting others). Optional timeframe: 7d, 30d, 90d, 1y, all.","inputSchema":{"type":"object","properties":{"timeframe":{"type":"string"},"perspective":{"type":"string"}}},"logicalName":"my_analytics","displayName":"my_analytics","title":"my_analytics","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"product_analytics","description":"Analytics for ONE of the user's products by productPda: totals (sales, gross volume, creator revenue, platform fees, affiliate sales, commission paid, distinct buyers/affiliates), per-affiliate breakdown, daily time series and recent purchases. Use to see how a specific product is performing. Only works for products the user owns.","inputSchema":{"type":"object","required":["productPda"],"properties":{"productPda":{"type":"string"}}},"logicalName":"product_analytics","displayName":"product_analytics","title":"product_analytics","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"prepare_usdc_transfer","description":"Build an UNSIGNED USDC transfer transaction. Returns base64-serialized tx + metadata (feePayer, recentBlockhash, instructions). The caller signs with their keypair and submits. Use when an agent needs to pay USDC (e.g. mint price) without giving the server its private key. FREE — no funds move server-side.","inputSchema":{"type":"object","required":["from","to","amountUsdc"],"properties":{"to":{"type":"string"},"from":{"type":"string"},"amountUsdc":{"type":"string"}}},"logicalName":"prepare_usdc_transfer","displayName":"prepare_usdc_transfer","title":"prepare_usdc_transfer","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"prepare_sol_transfer","description":"Build an UNSIGNED native SOL transfer transaction. Returns base64 tx. The caller signs and submits. Useful for paying another wallet's rent or topping up a helper. FREE.","inputSchema":{"type":"object","required":["from","to","amountSol"],"properties":{"to":{"type":"string"},"from":{"type":"string"},"amountSol":{"type":"string"}}},"logicalName":"prepare_sol_transfer","displayName":"prepare_sol_transfer","title":"prepare_sol_transfer","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_webhooks","description":"Your webhook endpoints: where Lid notifies you when something happens (a sale, a claimed prize, an approved conversion). Read-only.","inputSchema":{"type":"object","properties":{}},"logicalName":"list_webhooks","displayName":"list_webhooks","title":"list_webhooks","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_webhook","description":"Register a URL that Lid will call when the events you pick happen. Events: purchase.completed, prize.claimed, conversion.approved, subscription.created, bounty.submission.created. The response includes the signing secret ONCE — store it: every delivery is signed with it so you can verify the call really came from Lid.","inputSchema":{"type":"object","required":["url","events"],"properties":{"url":{"type":"string"},"events":{"type":"array","items":{"type":"string"}}}},"logicalName":"create_webhook","displayName":"create_webhook","title":"create_webhook","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_webhook","description":"Stop notifying a webhook endpoint.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"logicalName":"delete_webhook","displayName":"delete_webhook","title":"delete_webhook","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"webhook_deliveries","description":"Recent delivery attempts for one webhook, with status code and error — the first place to look when the tenant says 'Lid is not notifying me'.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string"},"limit":{"type":"integer"}}},"logicalName":"webhook_deliveries","displayName":"webhook_deliveries","title":"webhook_deliveries","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"prepare_purchase","description":"WRITE (does not spend YOUR money). Build an UNSIGNED purchase transaction so that ANOTHER wallet — your own end user — can sign it. This is how you sell from your own site or app without ever showing a Lid screen: you get back `txBase64`, your frontend has the buyer sign it with their wallet, then you POST it to /api/v1/lidpro/sponsor (the platform co-signs as gas payer and broadcasts) and finally call confirm_purchase with the signature. Pass affiliateCode to have the on-chain split pay the aff","inputSchema":{"type":"object","required":["productPda","buyer"],"properties":{"buyer":{"type":"string"},"productPda":{"type":"string"},"affiliateCode":{"type":"string"}}},"logicalName":"prepare_purchase","displayName":"prepare_purchase","title":"prepare_purchase","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"confirm_purchase","description":"Confirm a purchase you already broadcast: checks the signature landed on-chain and queues it so the receipt (and the buyer's downloadable files) show up in seconds instead of waiting for the next sweep. Safe to call twice.","inputSchema":{"type":"object","required":["signature"],"properties":{"signature":{"type":"string"}}},"logicalName":"confirm_purchase","displayName":"confirm_purchase","title":"confirm_purchase","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"my_sales","description":"What you SOLD (not what you bought), newest first, each with the deliverable files as presigned URLs (24h) so you can hand them to the buyer from your own app. Filter by ?buyer= to answer 'what did this customer buy'. Only covers products created by your wallets: a seller delivers what they sold.","inputSchema":{"type":"object","properties":{"buyer":{"type":"string"},"limit":{"type":"integer"},"productPda":{"type":"string"}}},"logicalName":"my_sales","displayName":"my_sales","title":"my_sales","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"purchase_product","description":"WRITE — SPENDS MONEY. Buy a Lidpro product ON-CHAIN with the custodial agent wallet: the USDC comes out of THAT wallet's own balance (fund it first — check get_my_usage) and the platform sponsor pays gas. The agent wallet becomes the owner of the receipt and is the only one that can download the content afterwards, via my_purchases. The 3% platform fee and the creator's share are split in the same transaction. Pass maxPriceUsdc (ATOMIC USDC string) as a spending cap: if the on-chain price is hig","inputSchema":{"type":"object","required":["productPda"],"properties":{"productPda":{"type":"string"},"maxPriceUsdc":{"type":"string"}}},"logicalName":"purchase_product","displayName":"purchase_product","title":"purchase_product","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"my_purchases","description":"What the custodial agent wallet has bought, newest first, WITH the deliverable files as presigned URLs (valid 24h). This is how the agent actually receives what it paid for. Right after purchase_product the receipt takes a few seconds to appear (the on-chain listener persists it), so retry if it is not there yet.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer"}}},"logicalName":"my_purchases","displayName":"my_purchases","title":"my_purchases","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_bounty","description":"WRITE. Create a bounty (Superteam-style reward). Created as a draft; with fund=true the custodial agent wallet signs create_pool + fund_pool ON-CHAIN (sponsor pays gas), the USDC prize is escrowed and the bounty opens immediately. Requires the agent wallet to hold enough USDC (fundAmount or the sum of prizes). Amounts are ATOMIC USDC strings (1 USDC = '1000000'). POLICY — you MUST pass acceptTerms:true, and the human must have agreed first: a bounty that had any activity (USDC escrowed on-chain","inputSchema":{"type":"object","required":["title","acceptTerms"],"properties":{"fund":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}},"prizes":{"type":"array","items":{"type":"object"}},"criteria":{"type":"string"},"deadline":{"type":"string"},"isPublic":{"type":"boolean"},"fundAmount":{"type":"string"},"acceptTerms":{"type":"boolean"},"maxSubmissionsPerUser":{"type":"integer"}}},"logicalName":"create_bounty","displayName":"create_bounty","title":"create_bounty","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_bounties","description":"List bounties. mine=false (default): PUBLIC listing of open bounties — no API key needed. mine=true: the API key user's own bounties (drafts included). Filters: status (draft|open|reviewing|paid|closed), tag. Paginated.","inputSchema":{"type":"object","properties":{"tag":{"type":"string"},"mine":{"type":"boolean"},"limit":{"type":"integer"},"offset":{"type":"integer"},"status":{"type":"string"}}},"logicalName":"list_bounties","displayName":"list_bounties","title":"list_bounties","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_bounty","description":"PUBLIC. Get one bounty by id: title, criteria, prizes, status, deadline, submissions count and the escrow pool state (funded/assigned/dispersed). Drafts are only visible to their creator.","inputSchema":{"type":"object","required":["bountyId"],"properties":{"bountyId":{"type":"string"}}},"logicalName":"get_bounty","displayName":"get_bounty","title":"get_bounty","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_submissions","description":"List the submissions of one of MY bounties (the API key user must be the creator — they see all of them). Filter by status: submitted|accepted|rejected|winner. Evidence files come back as presigned URLs (1h).","inputSchema":{"type":"object","required":["bountyId"],"properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"status":{"type":"string"},"bountyId":{"type":"string"}}},"logicalName":"list_submissions","displayName":"list_submissions","title":"list_submissions","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"review_submission","description":"WRITE. Review a submission of MY bounty: status 'accepted', 'rejected' or 'winner'. For 'winner' you MUST pass assignedAmount (ATOMIC USDC string) — the prize that will later be assigned on-chain with assign_bounty_winners. Optional feedback for the author.","inputSchema":{"type":"object","required":["bountyId","submissionId","status"],"properties":{"status":{"type":"string"},"bountyId":{"type":"string"},"feedback":{"type":"string"},"submissionId":{"type":"string"},"assignedAmount":{"type":"string"}}},"logicalName":"review_submission","displayName":"review_submission","title":"review_submission","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"assign_bounty_winners","description":"WRITE. Assign ALL pending winners of MY bounty ON-CHAIN in batch (submissions marked 'winner' that have no on-chain assignment yet). CUSTODIAL: the agent wallet (pool creator) signs assign_winner per winner and the sponsor pays gas. Winners then claim with claim_prize from their own wallet. Only works for pools created via create_bounty fund=true.","inputSchema":{"type":"object","required":["bountyId"],"properties":{"bountyId":{"type":"string"}}},"logicalName":"assign_bounty_winners","displayName":"assign_bounty_winners","title":"assign_bounty_winners","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_bounty_winners","description":"PUBLIC. Winners of a bounty + payment state per winner crossing the on-chain ledger: pending_assignment (the creator has not paid yet) → assigned (PAID: the USDC is reserved on-chain for that winner, who can claim it any time; the creator cannot take it back) → claimed (the winner collected it), with tx signatures.","inputSchema":{"type":"object","required":["bountyId"],"properties":{"bountyId":{"type":"string"}}},"logicalName":"get_bounty_winners","displayName":"get_bounty_winners","title":"get_bounty_winners","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_tracked_link","description":"WRITE. Create a short tracked link (https://<domain>/l/<slug>) owned by the API key's user. Tracks clicks, referrers and conversion events. slug is optional (autogenerated). Optionally attach it to one of MY campaigns via campaignId. Failed attempts do NOT consume your daily quota; the response carries `quota` with what's left.","inputSchema":{"type":"object","required":["destinationUrl"],"properties":{"slug":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"campaignId":{"type":"string"},"destinationUrl":{"type":"string"}}},"logicalName":"create_tracked_link","displayName":"create_tracked_link","title":"create_tracked_link","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_campaign","description":"WRITE. Create a link campaign (Dub-style) with optional GOALS in the same call. Each goal rewards an event (e.g. 'signup', 'purchase') with rewardAmount in ATOMIC USDC; rewarded conversions default to manual review (anti-fraud). Campaigns start as draft; goals with rewards need a funded pool before opening. Failed attempts do NOT consume your daily quota; the response carries `quota` with what's left.","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"goals":{"type":"array","items":{"type":"object"}},"isOpenToSharers":{"type":"boolean"},"attributionWindowDays":{"type":"integer"}}},"logicalName":"create_campaign","displayName":"create_campaign","title":"create_campaign","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_my_links","description":"List the API key user's tracked links (as owner or sharer) with their short URLs. Filters: campaignId, active.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer"},"active":{"type":"boolean"},"offset":{"type":"integer"},"campaignId":{"type":"string"}}},"logicalName":"list_my_links","displayName":"list_my_links","title":"list_my_links","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_link_analytics","description":"Analytics for one of MY tracked links: clicks (total/unique/by day/top referrers), events by name, conversions by status and the click→event→conversion funnel.","inputSchema":{"type":"object","required":["linkId"],"properties":{"linkId":{"type":"string"}}},"logicalName":"get_link_analytics","displayName":"get_link_analytics","title":"get_link_analytics","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_campaign_analytics","description":"Analytics for one of MY campaigns: aggregated funnel across all its links plus the sharers ranking (clicks, conversions, USDC earnings per sharer).","inputSchema":{"type":"object","required":["campaignId"],"properties":{"campaignId":{"type":"string"}}},"logicalName":"get_campaign_analytics","displayName":"get_campaign_analytics","title":"get_campaign_analytics","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_conversions","description":"List conversions of one of MY campaigns for review. Filter by status: pending | approved | rejected | paid. Each row includes the goal (eventName, rewardAmount) and the sharer who gets paid.","inputSchema":{"type":"object","required":["campaignId"],"properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"status":{"type":"string"},"campaignId":{"type":"string"}}},"logicalName":"list_conversions","displayName":"list_conversions","title":"list_conversions","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"review_conversion","description":"WRITE. Approve or reject a pending conversion of MY campaign (anti-fraud manual review). Approved conversions become payable via the campaign payout flow; they're marked 'paid' when the on-chain disbursement confirms.","inputSchema":{"type":"object","required":["conversionId","status"],"properties":{"status":{"type":"string"},"conversionId":{"type":"string"}}},"logicalName":"review_conversion","displayName":"review_conversion","title":"review_conversion","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_pool","description":"PUBLIC. State of a USDC disbursement pool (escrow) by its PDA: status, funded/assigned/dispersed amounts, deadline, plus the FULL on-chain ledger (assignments, claims, payouts with tx signatures).","inputSchema":{"type":"object","required":["poolPda"],"properties":{"poolPda":{"type":"string"}}},"logicalName":"get_pool","displayName":"get_pool","title":"get_pool","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"my_pending_prizes","description":"Prizes ASSIGNED to the API key's user that are still pending claim, with the pool context needed to build claim_prize. Use after winning a bounty to see what's claimable.","inputSchema":{"type":"object","properties":{}},"logicalName":"my_pending_prizes","displayName":"my_pending_prizes","title":"my_pending_prizes","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"api_health","description":"Check if the Lidpro API is reachable. Returns {status: 'ok'} on success.","inputSchema":{"type":"object","properties":{}},"logicalName":"api_health","displayName":"api_health","title":"api_health","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"upload_file","description":"WRITE. Host a file on Lid from a public URL: the API downloads it and stores it in the platform bucket. Use `gated: true` for the content the BUYER pays for — it returns a `key` you pass to update_product as `extraFiles: [{ key, title }]`, and buyers get a fresh signed link after purchase. Use `gated: false` (default) for covers and gallery images — it returns a stable public `url` for `previewImageUrl`. Only public http/https URLs are accepted (internal addresses are rejected) and the limit is","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"gated":{"type":"boolean"},"filename":{"type":"string"}}},"logicalName":"upload_file","displayName":"upload_file","title":"upload_file","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_product","description":"WRITE. Update the editorial side of a product you own: attach the files buyers download (`extraFiles`), set the cover, rewrite copy, or publish/unpublish it. On-chain terms (price, supply, affiliate commission) are NOT editable here — those live in the contract. A paid product with no `extraFiles` cannot be published: attach the content first (upload_file with gated:true). Attaching content to a draft publishes it automatically. Does NOT consume creation quota.","inputSchema":{"type":"object","required":["productPda"],"properties":{"name":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"gallery":{"type":"array","items":{"type":"object"}},"isPublic":{"type":"boolean"},"customUrl":{"type":"string"},"extraFiles":{"type":"array","items":{"type":"object"}},"productPda":{"type":"string"},"descriptionHtml":{"type":"string"},"metaDescription":{"type":"string"},"previewImageUrl":{"type":"string"}}},"logicalName":"update_product","displayName":"update_product","title":"update_product","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Lid&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3AubGlkLnByby9tY3AifQ%3D%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Lid%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.lid.pro%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Lid%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.lid.pro%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Lid&connectorUrl=https%3A%2F%2Fmcp.lid.pro%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Lid\" --url \"https://mcp.lid.pro/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/lid-mcp-b317fd4d4a","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/lid-mcp-b317fd4d4a/tools/{tool}","mcpServerUrl":"https://mcp.lid.pro/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/lid-mcp-b317fd4d4a?live=1"}