{"name":"com.growvib/growvib","slug":"growvib","title":"GrowVib: Social Media Growth","description":"Discover, compare and buy social media growth for Instagram, TikTok, YouTube, Telegram, X and more","url":"https://mcp.market/server/growvib","rating":null,"grade":"C","score":57,"certified":false,"status":"active","category":"media","tags":["media"],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":2,"ok":2,"last_checked_at":"2026-09-19T21:26:02.227Z","last_ok_at":"2026-09-19T21:26:02.227Z","latency_ms":240},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":null,"website":"https://growvib.com/mcp","version":"0.2.0","remotes":[{"type":"streamable-http","url":"https://api.growvib.com/mcp-public"}],"packages":[],"tools":[{"name":"create_paid_order","description":"Place an order and pay for it with USDC on Base or Solana, with no GrowVib account and no human in the loop, using the x402 payment protocol. Call it FIRST without the `payment` argument: it returns the exact payment requirements, one `accepts` entry per network (amount in atomic units, asset, recipient, network, and for Solana the facilitator's feePayer). Pick the network your wallet is on: sign an EIP-3009 transferWithAuthorization (Base) or build and sign the USDC transfer transaction (Solana) for exactly those requirements, then call it AGAIN with the same arguments plus `payment` set to the signed x402 payment payload. Anything paid above the order's price stays as spendable balance on the wallet's account, so many small orders can be paid for with one settlement. If a call reports that the payment is still being confirmed, do NOT sign and send a new payment: the first one may already have gone through. Use get_quote first if you only want a price.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"agent_token":{"description":"The agent_token from a previous order's result. Send it INSTEAD of `payment` to pay out of the balance you already hold, with no new signature and nothing on chain. Requires `idempotency_key`. If your balance does not cover the order you get the payment requirements back as usual.","type":"string"},"idempotency_key":{"description":"A value unique to this order attempt (a UUID is fine), required when using `agent_token`. Sending the same key again returns the SAME order instead of buying a second time, so a retry after a timeout is safe.","type":"string"},"link":{"description":"The target link the order is delivered to.","type":"string"},"payment":{"description":"The signed x402 v2 payment payload. Omit on the first call to receive the payment requirements.","properties":{},"type":"object"},"quantity":{"description":"Quantity to order.","type":"number"},"service_id":{"description":"The service id from search_catalog.","type":"string"},"service_option_id":{"description":"Optional specific service option id; defaults to the service's primary option.","type":"string"}},"required":["service_id","quantity","link"]}},{"name":"get_paid_order_status","description":"Track an order placed with create_paid_order: status, start count and remaining quantity. Pass the `agent_token` that create_paid_order returned (or one from the wallet sign-in at POST /v1/agent/auth/challenge). Read-only and idempotent, so polling it is safe. Statuses: PENDING, SUBMITTED, PROCESSING, COMPLETED, PARTIALLY_COMPLETED, CANCELED, FAILED, PARTIALLY_FAILED, REFUNDED, PARTIALLY_REFUNDED.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"agent_token":{"description":"The agent_token from create_paid_order's result, or from the wallet sign-in. It proves which wallet is asking; an order that is not this wallet's is reported as not found.","type":"string"},"order_id":{"description":"The order_id from create_paid_order.","type":"string"}},"required":["order_id","agent_token"]}},{"name":"get_quote","description":"Get the exact price that will be charged, with no account needed. Call this before every order: never total up the per-1000 prices the catalog tools return yourself, because the quantity bounds and rounding are applied here and nowhere else. Returns unit price and total in USD, priced by the same server-side path a real order uses. It places no order and charges nothing. The result's payment_methods says how the order can be paid: from a connected GrowVib account (connect one over OAuth at the /mcp endpoint, which is where the account ordering tool lives), or, when listed, with no account at all over x402 (USDC on Base or Solana, via create_paid_order or the REST endpoint it names; payment_methods.x402.networks lists the rails).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"quantity":{"description":"Quantity to order (e.g. number of members or views).","type":"number"},"service_id":{"description":"The service id from search_catalog.","type":"string"},"service_option_id":{"description":"Optional specific service option id; defaults to the service's primary option.","type":"string"}},"required":["service_id","quantity"]}},{"name":"get_service","description":"Look up ONE service you already have the id for. No id yet? Find one with search_catalog. Want a single option chosen for a quantity rather than all of them? Use recommend_service. Returns the service's full detail, including ALL of its plan options (id, name, price per 1000, min/max quantity, quality tier, typed axes such as country or watch length, listed delivery speed and start window, and the recommended flag), so you can present the available plans and quantity range to the user, then pass the chosen service_option_id to get_quote and create_paid_order (this endpoint lists it while the accountless x402 payment channel is on).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"service_id":{"description":"The service id from search_catalog.","type":"string"}},"required":["service_id"]}},{"name":"list_paid_orders","description":"List the orders belonging to the wallet behind an agent_token, newest first, each with the same fields get_paid_order_status returns. Use it when you no longer have the order_id an order gave you: after a restart, when resuming work another session started, or to check everything this wallet has bought. Pass the `agent_token` from any of its orders (or from the wallet sign-in at POST /v1/agent/auth/challenge). Optional `status` narrows to one order status, `page` and `page_size` page through the rest (page_size defaults to 10 and is capped at 100; the result carries the total so you know when to stop). Read-only and idempotent, so polling it is safe.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"agent_token":{"description":"The agent_token from one of this wallet's orders, or from the wallet sign-in. It proves which wallet is asking; only that wallet's orders are returned.","type":"string"},"page":{"description":"1-based page number (default 1).","type":"number"},"page_size":{"description":"Rows per page (default 10, maximum 100).","type":"number"},"status":{"description":"Optional order status to filter by: PENDING, SUBMITTED, PROCESSING, COMPLETED, PARTIALLY_COMPLETED, CANCELED, FAILED, PARTIALLY_FAILED, REFUNDED or PARTIALLY_REFUNDED.","type":"string"}},"required":["agent_token"]}},{"name":"recommend_service","description":"Choose WHICH plan option to order, once you know what to buy and for how many. Use it instead of comparing options yourself from search_catalog or get_service. Takes a service (or a platform plus a goal), a quantity, an audience and a preference. Returns one recommended option plus the cheapest, highest-tier and fastest-listed alternatives. Each pick carries the price per 1000, the total for this quantity, the quantity range it accepts, its quality tier, typed axes such as country or watch length, the listed delivery speed and start window, a sensitive flag marking a deliberate product such as a negative reaction, and short reasons written for the buyer. Branch on the typed fields; the reasons are prose in the requested locale and state only what an option gives, so their absence is never a drawback. One reason states how many independent delivery pools can serve the option, when two or more can: it is a count of the ways we can deliver it, not a promise about any one order, and a pick without it is not worse. The response also says how many options were considered, how many fit, and why the rest fell out (rejected: audience_mismatch, quantity_below_min, quantity_above_max, dominated). It carries quoted_at and catalog_version: the version fingerprints the option data the answer came from, so if you recommend, ask the user, then order, re-call and compare catalog_version to know whether the card changed in between. Prices are live at order time; placing an order re-prices from the same data get_quote does, so treat quoted_at as when this answer was computed, not as a price hold. tradeoffs compares each alternative with the lead as data (price and total deltas, quality steps, listed speed ratio, start bucket delta, max quantity delta, plus gives and costs naming the dimensions it wins and loses on; null means one side lists nothing). Use it to CHOOSE and to explain a choice as what each option gives (\"$18.60 less for one tier lower and twice the listed rate\"); never present a pick to the user as a percentage more expensive than another. Identify the service by service_id (from search_catalog) OR by platform + goal (the deliverable, e.g. platform \"youtube\" and goal \"short-views\" or \"followers\"). Read-only: it places no order. Pass the returned option_id as service_option_id to get_quote and create_paid_order (this endpoint lists it while the accountless x402 payment channel is on).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"audience":{"description":"\"worldwide\" (default) for untargeted delivery, or \"<axis>:<value>\" such as \"country:usa\" or \"emoji:❤️\". The response lists the audiences the service serves.","type":"string"},"goal":{"description":"The deliverable metric key (followers, likes, views, short-views, members, comments, ...). Used with platform when service_id is omitted.","type":"string"},"locale":{"description":"Language of the option labels and the reasons: en (default), fa, ru, uz or id. The typed fields are locale-independent, so pass the user's language freely.","type":"string"},"platform":{"description":"Platform key (telegram, instagram, tiktok, youtube, ...). Used with goal when service_id is omitted.","type":"string"},"priority":{"description":"\"balanced\" (default), \"cheapest\", \"quality\" or \"fastest\": which pick leads. fastest ranks on the LISTED delivery rate then start window (the listing's own claims); when no eligible option lists either it falls back to balanced.","type":"string"},"quantity":{"description":"The quantity the user wants to order; every pick accepts it.","type":"number"},"service_id":{"description":"The service id from search_catalog. Optional when platform and goal are given.","type":"string"}},"required":["quantity"]}},{"name":"search_catalog","description":"START HERE when you do not yet know which service to buy: this is the entry point to the catalog. Already have a service id? get_service returns that one in full detail. Know the service and only need the right plan for a quantity? recommend_service picks one. Searches the sellable social growth service catalog (Telegram, Instagram, TikTok, YouTube and more). Each result includes the service (id, name, platform, starting/cheapest price per 1000) AND its plan options (each with id, name, price per 1000, min/max quantity) - present the options to the user and let them choose a plan, then pass that service_option_id to get_quote and create_paid_order (this endpoint lists it while the accountless x402 payment channel is on) instead of defaulting to the cheapest.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"country":{"description":"Filter to geo-targeted services for a country (matches the catalog's geo-target codes, e.g. a country name or code). Most services are global and unaffected.","type":"string"},"limit":{"description":"Max results per page (1-50, default 20).","type":"number"},"locale":{"description":"Catalog language for names/descriptions (default en). Each service is returned once per call in this single language.","type":"string"},"max_price":{"description":"Only services whose starting price per 1000 is at most this (USD) - use for a budget cap.","type":"number"},"min_price":{"description":"Only services whose starting price per 1000 is at least this (USD).","type":"number"},"offset":{"description":"Row offset for paging (default 0). The response returns total, limit, offset and returned; fetch the next page with offset += limit while offset+returned < total.","type":"number"},"platform":{"description":"Filter by platform key, e.g. telegram, instagram, tiktok, youtube.","type":"string"},"quality_tier":{"description":"Filter by quality tier, e.g. standard, premium.","type":"string"},"query":{"description":"Keyword search over service names and descriptions. Pass concrete keywords (e.g. \"telegram members\"); map the user's natural-language intent (budget, country, speed) onto the structured filters below.","type":"string"},"sort_by":{"description":"Sort order: \"newest\" (default) or \"name\" (alphabetical).","type":"string"},"sort_order":{"description":"\"asc\" or \"desc\". Defaults to desc for newest, asc for name.","type":"string"},"speed_tier":{"description":"Filter by delivery speed tier (e.g. instant, fast) - use for \"fastest delivery\" requests.","type":"string"}},"required":[]}}],"scan":{"score":57,"grade":"C","scanned_at":"2026-09-19T20:04:34.832Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T20:04:34.839Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 295ms"]},"poisoning":{"score":13,"max":15,"notes":["7 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 2 write-action tools with no auth"]},"maintenance":{"score":3,"max":15,"notes":["no repository listed"]},"identity":{"score":4,"max":10,"notes":["verified namespace with website, no repo"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"},{"id":"poison.long-description","severity":"low","component":"poisoning","title":"Unusually long tool description (over 2,000 characters)","evidence":"tool recommend_service: …Choose WHICH plan option to order, once you know what to buy and for how many. Use it instead of comparing options yourself from search_catalog or get_service. Takes a service (or a platform plus a goal), a quantity, an audience and a preference. Returns one recommended option plus the cheapest, highest-tier and fastest-listed alternatives. Each pick carries the price per 1000, the total for this quantity, the quantity range it accepts, its quality tier, typed axes such as country or watch length, the listed delivery speed and start window, a sensitive flag marking a deliberate product such as a negative reaction, and short reasons written for the buyer. Branch on the typed fields; the reasons are prose in the requested locale and state only what an option gives, so their absence is never a drawback. One reason states how many independent delivery pools can serve the option, when two or more can: it is a count of the ways we can deliver it, not a promise about any one order, and a pick without it is not worse. The response also says how many options were considered, how many fit, and why the rest fell out (rejected: audience_mismatch, quantity_below_min, quantity_above_max, dominated). It carries quoted_at and catalog_version: the version fingerprints the option data the answer came from, so if you recommend, ask the user, then order, re-call and compare catalog_version to know whether the card changed in between. Prices are live at order time; placing an order re-prices from the same data get_quote does, so treat quoted_at as when this answer was computed, not as a price hold. tradeoffs compares each alternative with the lead as data (price and total deltas, quality steps, listed speed ratio, start bucket delta, max quantity delta, plus gives and costs naming the dimensions it wins and loses on; null means one side lists nothing). Use it to CHOOSE and to explain a choice as what each option gives (\"$18.60 less for one tier lower and twice the listed rate\"); never present a pick to the user as a percentage more expensive than another. Identify the service by service_id (from search_catalog) OR by platform + goal (the deliverable, e.g. platform \"youtube\" and goal \"short-views\" or \"followers\"). Read-only: it places no order. Pass the returned option_id as service_option_id to get_quote and create_paid_order (this endpoint lists it while the accountless x402 payment channel is on).…"},{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"probes":[{"url":"https://api.growvib.com/mcp-public","reachable":true,"authRequired":false,"latencyMs":295,"serverInfo":{"name":"growvib-mcp-public","version":"0.1.0"}}],"packages":[],"repo":{"found":false},"icon":{"url":"https://growvib.com/icon.svg?icon.1wguz93uj3yds.svg?dpl=2413c3df69fec973eae22e8b4c81bb47e3cb41be","source":"registry"},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}