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.
- 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.
- Open your company dashboard → Webhooks, add the receiver URL, select events, and save the one-time signing secret in your receiver. Open dashboard
- 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
- 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.
{
"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.
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.
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.
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:
- Sign in (Google, or email if dev-login is enabled).
- Open Dashboard → MCP tokens, click Create token, name it, pick scopes, and choose an expiration.
- Copy the value (starts with
aiv_mcp_…) — it’s shown only once. - Paste it in place of
YOUR_MCP_TOKENin 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
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):
{
"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
{
"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:
{
"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.
- Open Settings → Connectors.
- Click Add custom connector.
- Set the URL to:
https://mcp.marketplace.aivironment.ai/mcp - Add a custom header named
Authorizationwith valueBearer YOUR_MCP_TOKEN. - 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.
- Open Settings → Connectors → Add MCP server.
- URL:
https://mcp.marketplace.aivironment.ai/mcp - 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.
curl "https://api.marketplace.aivironment.ai/api/v1/search?q=industrial+robotics&country_code=DE"GET /api/v1/search— keyword + filter searchGET /api/v1/companies/{slug}— single company profileGET /api/v1/companies/featured— curated listingsGET /api/v1/categories— industry taxonomyPOST /api/v1/quote-requests— submit a quote request
Available tools
Search the directory by natural-language query and structured filters. Returns ranked companies with location, industry, verification status, and certifications.
Fetch a complete profile — description, offerings, public contact methods, review summary.
Submit a quote request on behalf of your user. Rate-limited to 5 per hour per (company, requester_email) pair.
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.
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.
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
marketplace_search_companies(query="…")→ pick candidates. For known buyers, every result is annotated with apreviously_contactedblock — the assistant can flag, skip, or passexclude_already_contacted=trueto filter server-side.marketplace_get_company(slug="…")→ read full profile, verify fit.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.- Later:
marketplace_buyer_list_my_conversations()andmarketplace_buyer_get_conversation(id)recall what was asked and who replied;marketplace_buyer_archive_conversation(id)closes a dead lead.