Skip to content

Connect via MCP

Add the AiVironment Marketplace as a tool source to your AI client. Once connected, the model can search the directory, read company profiles, and submit quote requests on your behalf — no scraping, no HTML parsing.

New here? Read the guide first to understand what the marketplace is and what you can do with it.

Connect RFQs and messages to your CRM

Connect your own receiver or automation workflow. It creates CRM work items from marketplace events and links them to the original conversation. This is a generic integration API, not a built-in connector for a particular CRM.

  1. Prepare a public HTTPS receiver that verifies signatures, stores event IDs to prevent duplicate processing, and quickly returns a 2xx response after durably accepting an event.
  2. Open your company dashboard → Webhooks, add the receiver URL, select events, and save the one-time signing secret in your receiver. Open dashboard
  3. For metadata import and CRM record links, create a token with api:crm:read and api:crm:write. Add api:crm:reply only if your integration will send explicitly authorized supplier replies. Create API token
  4. Send a test event and confirm Delivered in the log. Then process a real verified RFQ, create the CRM record, and save its identifier using the API below.

Events and CRM reads contain identifiers, status, timestamps and an authenticated marketplace link. They do not include buyer contact details, message bodies, RFQ answers, prices or attachments. New connections do not backfill older events.

Event payload

Subscribe to rfq.received, message.received, rfq.status_changed and rfq.outcome_changed. Outcomes identify buyer withdrawal, supplier decline or a completed discussion. A webhook.test event contains empty data and no conversation link. Use the stable event ID for duplicate prevention.

json
{
  "id": "00000000-0000-4000-8000-000000000001",
  "type": "rfq.received",
  "version": 1,
  "created_at": "2026-10-01T10:00:00Z",
  "company_id": "00000000-0000-4000-8000-000000000002",
  "data": {
    "quote_request_id": "00000000-0000-4000-8000-000000000003",
    "conversation_id": "00000000-0000-4000-8000-000000000004",
    "message_id": "00000000-0000-4000-8000-000000000005"
  },
  "url": "https://marketplace.aivironment.ai/dashboard/company/example?tab=inbox&conversation=00000000-0000-4000-8000-000000000004"
}
Verify receiver signatures

Read X-Aivironment-Signature as t=UNIX_SECONDS,v1=HEX_DIGEST. Verify HMAC-SHA256 over the timestamp, a period, and the original request bytes, using the complete signing secret including whsec_. Do not parse and reserialize JSON before verification. This Node.js example accepts a five-minute clock window.

javascript
import { createHmac, timingSafeEqual } from "node:crypto"

export function verifyWebhook(rawBody, signatureHeader, signingSecret) {
  const match = /^t=(\d+),v1=([a-f0-9]{64})$/.exec(signatureHeader ?? "")
  if (!match) return false
  const timestamp = Number(match[1])
  if (!Number.isSafeInteger(timestamp)) return false
  if (Math.abs(Date.now() / 1000 - timestamp) > 300) return false
  const expected = createHmac("sha256", signingSecret)
    .update(match[1] + ".")
    .update(rawBody)
    .digest()
  return timingSafeEqual(expected, Buffer.from(match[2], "hex"))
}

Deliveries can repeat and arrive out of order. Record X-Aivironment-Event-Id before processing; X-Aivironment-Delivery-Id identifies the endpoint delivery shown in the dashboard. Read current CRM API metadata before applying status changes. Retry failed events from the delivery log after fixing the receiver.

Import metadata and save CRM references

Use api:crm:read for GET /api/v1/integrations/crm/conversations. Paginate with limit (up to 100) and offset; optionally filter by company_id. Responses include current RFQ status, conversation state, marketplace_path and stored CRM references.

bash
curl "https://api.marketplace.aivironment.ai/api/v1/integrations/crm/conversations?limit=50&offset=0" \
  --header "Authorization: Bearer YOUR_API_TOKEN"

After your receiver creates a CRM record, save its opaque identifier using api:crm:write. Use a stable system name such as my-crm. The supplier inbox displays this reference; no customer details are copied.

http
PUT /api/v1/integrations/crm/conversations/{conversation_id}/links/my-crm
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json

{ "external_record_id": "deal-123" }

The same API supports PATCH /conversations/ID/status and POST /conversations/ID/close with api:crm:write. Sending POST /conversations/ID/messages requires api:crm:reply, a JSON body containing body, and a stable Idempotency-Key header. Closing an RFQ status and closing a conversation are separate actions.

Pause keeps already queued deliveries but stops collecting new events. Delivery records expire after 30 days, including paused ones. Secret rotation immediately invalidates the old secret. Deleting an endpoint removes its delivery history.

Start here — no account needed

Paste the endpoint below into your AI client. It works immediately: no sign-up, no token, no OAuth round-trip.

https://mcp.marketplace.aivironment.ai/mcp

Without any credential you can search the directory, read a company profile, and compose a quote request. The draft comes back as a link — hand it to the person you are helping, and they add their own email address and press send. You cannot send on their behalf, which is exactly why this is safe to leave open.

Anonymous results are capped at 3 pages of 10. Sending a quote request directly, and anything touching a listing you own, needs a token.

Add a token (optional)

A token is not required to search or to draft a request. It adds attribution, lifts the result cap, and unlocks sending quote requests directly plus managing your own listings:

  1. Sign in (Google, or email if dev-login is enabled).
  2. Open Dashboard → MCP tokens, click Create token, name it, pick scopes, and choose an expiration.
  3. Copy the value (starts with aiv_mcp_…) — it’s shown only once.
  4. Paste it in place of YOUR_MCP_TOKEN in any snippet below. Revoke any time from the same page.

Need help or want a higher rate limit? pmagdanski@qasttor.com.

Claude Code

Anthropic’s CLI. Easiest to wire up — one command and the tools appear next time you open a session.

Option A — CLI

bash
claude mcp add aivironment-marketplace \
  --transport http \
  https://mcp.marketplace.aivironment.ai/mcp \
  --header "Authorization: Bearer YOUR_MCP_TOKEN"

Option B — edit config directly

Add this to ~/.claude.json (or use /mcp inside Claude Code):

json
{
  "mcpServers": {
    "aivironment-marketplace": {
      "type": "http",
      "url": "https://mcp.marketplace.aivironment.ai/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_TOKEN"
      }
    }
  }
}

Claude Desktop

The macOS / Windows app. Recent versions support HTTP transport directly; older versions need a stdio bridge.

Recent versions (HTTP transport)

Same JSON shape as Claude Code, in claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
json
{
  "mcpServers": {
    "aivironment-marketplace": {
      "type": "http",
      "url": "https://mcp.marketplace.aivironment.ai/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_TOKEN"
      }
    }
  }
}

Older versions (stdio bridge via mcp-remote)

If your Claude Desktop only speaks stdio, wrap the HTTP endpoint with mcp-remote:

json
{
  "mcpServers": {
    "aivironment-marketplace": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://mcp.marketplace.aivironment.ai/mcp",
        "--header",
        "Authorization: Bearer YOUR_MCP_TOKEN"
      ]
    }
  }
}

Claude.ai (web)

Pro, Team, and Enterprise plans support custom MCP connectors via the web UI.

  1. Open Settings → Connectors.
  2. Click Add custom connector.
  3. Set the URL to:
    https://mcp.marketplace.aivironment.ai/mcp
  4. Add a custom header named Authorization with value Bearer YOUR_MCP_TOKEN.
  5. Save. The three tools appear in the connector list and become callable in any new conversation.

ChatGPT

MCP support is available on Pro, Business, and Enterprise plans.

  1. Open Settings → Connectors → Add MCP server.
  2. URL:
    https://mcp.marketplace.aivironment.ai/mcp
  3. Authentication: Bearer token. Paste your key.

REST fallback

If your runtime doesn’t speak MCP, the same data is exposed over plain HTTP. No auth required for read-only endpoints; quote-request submissions are rate-limited per email.

bash
curl "https://api.marketplace.aivironment.ai/api/v1/search?q=industrial+robotics&country_code=DE"
  • GET /api/v1/search — keyword + filter search
  • GET /api/v1/companies/{slug} — single company profile
  • GET /api/v1/companies/featured — curated listings
  • GET /api/v1/categories — industry taxonomy
  • POST /api/v1/quote-requests — submit a quote request

Available tools

marketplace_search_companies(query?, country_code?, industry_code?, certification?, page?, per_page?)

Search the directory by natural-language query and structured filters. Returns ranked companies with location, industry, verification status, and certifications.

marketplace_get_company(slug)

Fetch a complete profile — description, offerings, public contact methods, review summary.

marketplace_request_quote(company_id, requester_name, requester_email, message, requester_company?, budget_label?)

Submit a quote request on behalf of your user. Rate-limited to 5 per hour per (company, requester_email) pair.

marketplace_buyer_list_my_conversations(limit?, offset?, include_closed?)

List the caller’s past quote requests + brokered conversations, newest activity first. Each row carries state, last activity, a seller_replied flag, and the buyer-archived flag — enough to summarise an inbox without a follow-up call. Requires scope mcp:buyer:history.

marketplace_buyer_get_conversation(conversation_id)

Full thread for one of the caller’s own conversations — their original message plus every seller reply since. Cross-tenant access returns the same not_found envelope as a missing id. Requires scope mcp:buyer:history.

marketplace_buyer_archive_conversation(conversation_id, reason?)

Mark a conversation as “no longer interested” — sets the buyer-archived timestamp and closes the thread from the buyer side. Idempotent. Once archived, the company will not resurface on searches that pass exclude_already_contacted=true. Requires scope mcp:buyer:history.

Typical workflow

  1. marketplace_search_companies(query="…") → pick candidates. For known buyers, every result is annotated with a previously_contacted block — the assistant can flag, skip, or pass exclude_already_contacted=true to filter server-side.
  2. marketplace_get_company(slug="…") → read full profile, verify fit.
  3. marketplace_request_quote(company_id="…", …) → hand off contact. The lead is attributed to the calling user (when a personal token is used) so it surfaces in their history.
  4. Later: marketplace_buyer_list_my_conversations() and marketplace_buyer_get_conversation(id) recall what was asked and who replied; marketplace_buyer_archive_conversation(id) closes a dead lead.