Skip to content

dev.nexbid/discovery

by nexbid.dev · remote · no sign-in to list tools · v1.0.1 · published by dev.nexbid

Search and discover advertiser products through an open marketplace for AI agents.

Deletes · 1Final · 1Changes · 8

19 tools: 1 can delete or cancel things, 1 do something that can't be undone, 8 change things and 9 only read.

Scanned Oct 21, 2026

2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http discovery https://mcp.nexbid.dev/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn1 info
  • Warncancel

    The server marks "cancel" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "cancel" says "cancel": a word for removing or ending something.

    What this check looks for
  • The description is 2,630 characters long, over the 2,000 this check looks for.

    Matched text

    description ends: "...rvices: service name, provider, location, price model, duration. </output_format>"

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

19 tools

Deletes or cancels 1Claude Code: deny
  • cancel<tool_description> Cancel a media buy campaign.1 finding

    Why it is in this group

    • The name "cancel" says "cancel": a word for removing or ending something.
    • The description says "Cannot be undone".
    • The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "cancel" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "cancel" says "cancel": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    <tool_description> Cancel a media buy campaign. This is a terminal state — cannot be reactivated. </tool_description> <when_to_use> When an advertiser wants to permanently stop a campaign. Cannot be undone. Use pause for temporary stops. </when_to_use> <combination_hints> cancel is terminal. For temporary suspension use pause instead. Remaining budget is released. </combination_hints> <output_format> Updated media buy with cancelled status. </output_format>

    Annotations the server declares

    • title: Cancel Campaign
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
Can't be undone 1Claude Code: ask
  • nexbid_purchase<tool_description> Initiate a purchase for a product found via nexbid_search.No findings

    Why it is in this group

    • The name "nexbid_purchase" says "purchase": a word that usually means money moves, which cannot be taken back.
    Description, as the server wrote it
    <tool_description> Initiate a purchase for a product found via nexbid_search. Returns a checkout link that the user can click to complete the purchase at the retailer. The agent should present this link to the user for confirmation. </tool_description> <when_to_use> ONLY after user has expressed clear purchase intent for a specific product. Requires a product UUID from nexbid_search or nexbid_product. ALWAYS confirm with user before calling this tool. </when_to_use> <combination_hints> nexbid_search (purchase intent) → nexbid_purchase → present checkout link to user. After purchase → nexbid_order_status to check if completed. Use checkout_mode=wallet_pay when the user has a connected wallet with active mandate. </combination_hints> <output_format> For prefill_link (default): Checkout URL that the user clicks to complete purchase at the retailer. For wallet_pay: Intent ID and status for mandate-based authorization. Include product name and price for user confirmation. </output_format>

    Annotations the server declares

    • title: Purchase Product
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
Changes things 8Claude Code: ask
  • activate<tool_description> Activate an approved media buy to start serving.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    <tool_description> Activate an approved media buy to start serving. Requires creative to be submitted first. </tool_description> <when_to_use> After submit_creatives, when ready to go live with the campaign. </when_to_use> <combination_hints> submit_creatives → activate → track_enriched_snippet (for enriched snippet buys). Can be paused later with pause, or cancelled with cancel. </combination_hints> <output_format> Activated media buy with won_at timestamp. </output_format>

    Annotations the server declares

    • title: Activate Campaign
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • create_media_buy<tool_description> Create a media buy (bid on publisher inventory).No findings

    Why it is in this group

    • The name "create_media_buy" says "create": a word for a change.
    Description, as the server wrote it
    <tool_description> Create a media buy (bid on publisher inventory). Validates rules, runs auction scoring, and returns approval/rejection status. AdCP-compatible first-price sealed-bid auction. </tool_description> <when_to_use> When an advertiser wants to place a bid on a publisher inventory slot. Requires inventory_id from list_inventory/get_inventory_item. ALWAYS confirm with user before calling — creates a binding commitment. </when_to_use> <combination_hints> list_inventory → get_inventory_item → create_media_buy → submit_creatives → activate. If rejected: check rejection_reason and adjust bid/brand/category. Score formula: 0.3*bid + 0.3*similarity + 0.2*quality + 0.2*context. </combination_hints> <output_format> Media buy ID, status (approved/rejected), auction score, rejection reason if applicable. </output_format>

    Annotations the server declares

    • title: Create Media Buy
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • nexbid_categories<tool_description> List all available product categories in the Nexbid marketplace with product counts.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    <tool_description> List all available product categories in the Nexbid marketplace with product counts. Optionally filter by country. </tool_description> <when_to_use> When user wants to explore what is available before searching. Use BEFORE nexbid_search to help narrow down the query. </when_to_use> <combination_hints> nexbid_categories → nexbid_search with category filter for targeted results. Good starting point for browse intent. </combination_hints> <output_format> List of categories with product counts. Optionally filtered by country. </output_format>

    Annotations the server declares

    • title: Category Browser
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • nexbid_product<tool_description> Get detailed product information by ID from the Nexbid marketplace.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    <tool_description> Get detailed product information by ID from the Nexbid marketplace. Returns full product details including price, availability, description, and purchase link. </tool_description> <when_to_use> When you have a specific product UUID from a previous nexbid_search result. Do NOT use for browsing — use nexbid_search instead. </when_to_use> <combination_hints> Typically called after nexbid_search to get full details on a specific product. If user wants to buy → follow with nexbid_purchase. </combination_hints> <output_format> Full product details: name, description, price, currency, availability, brand, category, purchase link. </output_format>

    Annotations the server declares

    • title: Product Details
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • pause<tool_description> Pause an active media buy campaign.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    <tool_description> Pause an active media buy campaign. Can be reactivated later. </tool_description> <when_to_use> When an advertiser wants to temporarily stop a running campaign. Only works on active campaigns. </when_to_use> <combination_hints> activate → pause (temporary) or cancel (permanent). Paused campaigns can be reactivated with activate. </combination_hints> <output_format> Updated media buy with paused status. </output_format>

    Annotations the server declares

    • title: Pause Campaign
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • settle<tool_description> Settle pending payments for media buys.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    <tool_description> Settle pending payments for media buys. Supports manual CSV export, Stripe invoice (Phase 2 stub), and x402 micropayments (Phase 2 stub). </tool_description> <when_to_use> When a publisher wants to collect earned revenue or an advertiser needs to settle outstanding charges. Use method='manual' for CSV export. Stripe and x402 are stubs (Phase 2). </when_to_use> <combination_hints> get_campaign_report → settle (after verifying amounts). Filter by media_buy_id, publisher_id, or period. </combination_hints> <output_format> Settlement totals (gross, platform fee, net), entry count, and method-specific data (CSV for manual). </output_format>

    Annotations the server declares

    • title: Settle Payments
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • submit_creatives<tool_description> Submit or update creative assets for an existing media buy.No findings

    Why it is in this group

    • The name "submit_creatives" says "submit": a word for a change.
    Description, as the server wrote it
    <tool_description> Submit or update creative assets for an existing media buy. Required before activation. </tool_description> <when_to_use> After create_media_buy returns approved status. Upload creative before activating. </when_to_use> <combination_hints> create_media_buy (approved) → submit_creatives → activate. Creative types: banner, native, snippet, video, text. </combination_hints> <output_format> Updated media buy with creative info attached. </output_format>

    Annotations the server declares

    • title: Submit Creatives
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • track_enriched_snippet<tool_description> Track delivery of an enriched snippet and bill the advertiser.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    <tool_description> Track delivery of an enriched snippet and bill the advertiser. Creates a ledger entry and decrements the media buy budget. </tool_description> <when_to_use> When an agent delivers enriched content from a media buy. Each delivery is billed by snippet tier: - basic: 10¢, standard: 50¢, rich: 150¢, premium: 300¢ (CHF centimes). </when_to_use> <combination_hints> activate (enriched_snippet buy) → track_enriched_snippet per delivery. get_campaign_report shows cumulative tracking. </combination_hints> <output_format> Event ID, charged amount, platform fee, net payout, remaining budget. </output_format>

    Annotations the server declares

    • title: Track Enriched Snippet
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
Only reads 9Claude Code: allow
  • get_campaign_report<tool_description> Get aggregated performance report for a media buy.No findings

    Why it is in this group

    • The name "get_campaign_report" says "get": a word for reading.
    Description, as the server wrote it
    <tool_description> Get aggregated performance report for a media buy. Shows spend, impressions, clicks, conversions with time-series breakdown. </tool_description> <when_to_use> To check campaign performance metrics after activation. Supports period filtering and granularity control. </when_to_use> <combination_hints> list_media_buys → get_campaign_report for performance analysis. Pair with get_compliance_status for full campaign overview. </combination_hints> <output_format> Totals (spend, impressions, clicks, conversions) + time-series breakdown. </output_format>

    Annotations the server declares

    • title: Campaign Report
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_compliance_status<tool_description> Check nDSG/GDPR/EU AI Act compliance status for a media buy.No findings

    Why it is in this group

    • The name "get_compliance_status" says "get": a word for reading.
    Description, as the server wrote it
    <tool_description> Check nDSG/GDPR/EU AI Act compliance status for a media buy. Verifies privacy-native architecture compliance. </tool_description> <when_to_use> Before activating a campaign or for compliance audits. Checks: no cookies, no fingerprinting, contextual targeting, data residency, revenue transparency, consent basis, agent transparency. </when_to_use> <combination_hints> create_media_buy → get_compliance_status → activate (if compliant). Use for regulatory reporting and audit trails. </combination_hints> <output_format> Overall compliance status + individual check results with details. </output_format>

    Annotations the server declares

    • title: Compliance Status
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_inventory_item<tool_description> Get detailed information about a specific publisher inventory slot, including rules and active buy count.No findings

    Why it is in this group

    • The name "get_inventory_item" says "get": a word for reading.
    Description, as the server wrote it
    <tool_description> Get detailed information about a specific publisher inventory slot, including rules and active buy count. </tool_description> <when_to_use> After list_inventory to get full slot details before bidding. Check capacity (active buys vs max_concurrent) before create_media_buy. </when_to_use> <combination_hints> list_inventory → get_inventory_item → create_media_buy. Shows brand/category allowlists, blocklists, and current utilization. </combination_hints> <output_format> Full slot details with rules, pricing, capacity, and active buy count. </output_format>

    Annotations the server declares

    • title: Get Inventory Details
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_product<tool_description> Get detailed product information by ID.No findings

    Why it is in this group

    • The name "get_product" says "get": a word for reading.
    Description, as the server wrote it
    <tool_description> Get detailed product information by ID. Alias for nexbid_product. </tool_description> <when_to_use> When you have a product UUID from list_products or nexbid_search. </when_to_use> <combination_hints> list_products → get_product → create_media_buy or nexbid_purchase. </combination_hints> <output_format> Full product details: name, description, price, currency, availability, brand, category, link. </output_format>

    Annotations the server declares

    • title: Get Product Details
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • list_inventory<tool_description> List available publisher inventory slots for programmatic media buying.No findings

    Why it is in this group

    • The name "list_inventory" says "list": a word for reading.
    Description, as the server wrote it
    <tool_description> List available publisher inventory slots for programmatic media buying. Returns ad slots with pricing, rules, and capacity info. </tool_description> <when_to_use> Before create_media_buy — discover which slots are available. Use to browse publisher ad inventory for campaign planning. </when_to_use> <combination_hints> list_inventory → get_inventory_item for slot details → create_media_buy to bid. Filter by publisher_id, slot_type, pricing_model, or geo for targeted results. </combination_hints> <output_format> Inventory slots with: name, type, floor price, pricing models, capacity, geo targets, status. </output_format>

    Annotations the server declares

    • title: List Inventory Slots
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • list_media_buys<tool_description> List media buys with optional filters.No findings

    Why it is in this group

    • The name "list_media_buys" says "list": a word for reading.
    Description, as the server wrote it
    <tool_description> List media buys with optional filters. View campaign history for advertisers or publishers. </tool_description> <when_to_use> To view existing media buys (campaigns). Filter by advertiser, publisher, status, or date. </when_to_use> <combination_hints> list_media_buys → get_campaign_report for performance data. list_media_buys → get_compliance_status for compliance check. </combination_hints> <output_format> List of media buys with ID, status, bid, budget, spent, and dates. </output_format>

    Annotations the server declares

    • title: List Media Buys
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • list_products<tool_description> Search for products in the Nexbid marketplace.No findings

    Why it is in this group

    • The name "list_products" says "list": a word for reading.
    Description, as the server wrote it
    <tool_description> Search for products in the Nexbid marketplace. Alias for nexbid_search with content_type='product'. </tool_description> <when_to_use> When an agent needs to discover products (not recipes or services). Convenience alias — delegates to nexbid_search internally. </when_to_use> <combination_hints> list_products → get_product for details → create_media_buy for advertising. For recipes/services use nexbid_search with content_type filter. </combination_hints> <output_format> Product list with name, price, availability, score, and link. </output_format>

    Annotations the server declares

    • title: List Products
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • nexbid_order_status<tool_description> Check the status of a purchase intent created via nexbid_purchase.No findings

    Why it is in this group

    • The name "nexbid_order_status" says "status": a word for reading.
    Description, as the server wrote it
    <tool_description> Check the status of a purchase intent created via nexbid_purchase. </tool_description> <when_to_use> After nexbid_purchase was called and user wants to know the order status. Requires the intent_id UUID returned by nexbid_purchase. </when_to_use> <combination_hints> Always follows nexbid_purchase. No other tool needed after this. </combination_hints> <output_format> Current status (pending/completed/expired), checkout link if still active. </output_format>

    Annotations the server declares

    • title: Order Status
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.1. Values in angle brackets are yours to fill in.

claude mcp add --transport http discovery https://mcp.nexbid.dev/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__discovery__nexbid_search",
      "mcp__discovery__nexbid_order_status",
      "mcp__discovery__list_products",
      "mcp__discovery__get_product",
      "mcp__discovery__list_inventory",
      "mcp__discovery__get_inventory_item",
      "mcp__discovery__list_media_buys",
      "mcp__discovery__get_campaign_report",
      "mcp__discovery__get_compliance_status"
    ],
    "ask": [
      "mcp__discovery__nexbid_product",
      "mcp__discovery__nexbid_categories",
      "mcp__discovery__nexbid_purchase",
      "mcp__discovery__create_media_buy",
      "mcp__discovery__submit_creatives",
      "mcp__discovery__activate",
      "mcp__discovery__pause",
      "mcp__discovery__settle",
      "mcp__discovery__track_enriched_snippet"
    ],
    "deny": [
      "mcp__discovery__cancel"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as discovery. Review it before you use it.