CazVid
API docs

Agent access (MCP)

CazVid MCP server

CazVid's remote MCP (Model Context Protocol) server gives AI agents tool access to the CazVid Developer API. Connect an agent to preview and create job posts, search the candidate pool, review your webhook endpoints, search public job posts, and work your CRM contacts and interactions in plain language, using the same API key and quotas as the REST APIs.

MCP endpoint

https://mcp.cazvid.com/mcp

Streamable HTTP transport only.

Overview

The MCP server is a stateless remote server at https://mcp.cazvid.com/mcp. Point any MCP client at it (Claude Code, Claude.ai custom connectors, ChatGPT developer mode, Cursor, VS Code) and the agent gets fifteen tools that wrap CazVid's public Job Builder, Candidate Search, Webhooks, Job Search, and CRM APIs. The server holds no secrets: it forwards your CazVid API key to the upstream API, and all quota and plan enforcement happens upstream.

One endpoint, Streamable HTTP only

All traffic is a POST to the single /mcp endpoint using the Streamable HTTP transport. GET /mcp returns 405 (the server opens no server-initiated stream). There is no SSE-only or stdio transport.

Connect a client

Provide your CazVid API key one of two ways. Both hit the same validation path; pick the one your client supports.

Header auth (Claude Code, Cursor, VS Code)

Clients that can set request headers send the key as Authorization: Bearer <key> or x-api-key: <key> on POST /mcp. This is the primary form.

Authorization: Bearer cazvid_jb_...
x-api-key: cazvid_jb_...

Claude Code (CLI)

claude mcp add --transport http cazvid https://mcp.cazvid.com/mcp \
  --header "Authorization: Bearer cazvid_jb_YOUR_KEY"

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "cazvid": {
      "url": "https://mcp.cazvid.com/mcp",
      "headers": { "Authorization": "Bearer cazvid_jb_YOUR_KEY" }
    }
  }
}

VS Code (.vscode/mcp.json)

{
  "servers": {
    "cazvid": {
      "type": "http",
      "url": "https://mcp.cazvid.com/mcp",
      "headers": { "Authorization": "Bearer cazvid_jb_YOUR_KEY" }
    }
  }
}

URL path form (Claude.ai connectors, ChatGPT)

Connector UIs that expose only a URL field and cannot set headers use the path-key form POST /mcp/<key>. In Claude.ai add it under Settings > Connectors > Add custom connector; in ChatGPT enable developer mode, add a connector with authentication set to No authentication, and paste the URL.

https://mcp.cazvid.com/mcp/cazvid_jb_YOUR_KEY
  • The URL then contains your credential. Keep it private - anyone with the URL can spend your quota.
  • Rotate or revoke it anytime in the CazVid app under Profile > Developer API; the old URL stops working immediately.
  • The server sets Referrer-Policy: no-referrer on every response and never logs URLs, headers, or keys.

Query-string keys (for example ?key=...) are ignored - the call proceeds keyless. Use a header or the path segment.

Tools

Every family's tools are exposed as one flat list. preview_job and create_job cover job posting; search_candidates covers candidate search; list_webhook_endpoints covers webhooks; search_jobs covers job search; the nine crm_* tools cover the CRM; list_api_usage reports all five families' quotas.

ToolWhat it doesQuota
preview_jobGenerate a job draft (title, work mode, salary, optional description) from a prompt. Nothing is saved.Job Builder: 1 of 10/day
create_jobCreate a real job. Defaults to a reviewable draft; publishes for CazVid's normal review only on explicit instruction. Content-derived idempotency makes retries safe.Job Builder: 1 of 10/day
list_api_usageReport all five families' quotas (used, remaining, reset time). Consumes nothing.Free
search_candidatesRead-only search of the candidate pool with a plain-language query plus optional filters. Results carry no contact details.Candidate Search: 1 of 100/day
list_webhook_endpointsRead-only list of the organization's webhook endpoints, with each one's URL, status, subscribed events, and timestamps. Never returns signing secrets.Free
search_jobsRead-only search of public CazVid job posts with a plain-language query plus optional filters. Each result carries an applyUrl and no hiring-manager contact details.Job Search: 1 of 500/day
crm_search_contactsRead-only list or search of your CRM contacts, returning compact rows plus the contact id. Emails and phones are withheld here; paginated on a hasMore flag.CRM: 1 of 500/day
crm_get_contactRead-only full detail of one CRM contact by id, including every email and phone with its label, tags, and resume state.CRM: 1 of 500/day
crm_upsert_contactCreate a CRM contact; only a name is required. De-duplicates by email or phone within the workspace, so a repeat call that carries one of those returns the existing contact and a retry is safe. A name-only create has no de-duplication key, so retrying it can produce a second contact.CRM: 1 of 500/day
crm_update_contactUpdate fields on an existing CRM contact. Send only what changes; emails and phones are capped to one each and replace the primary slot rather than appending.CRM: 1 of 500/day
crm_delete_contactSoft-delete a CRM contact. Archives it and removes its interactions and list memberships. Destructive, so call it only on an explicit request.CRM: 1 of 500/day
crm_log_interactionAppend a timeline entry (email, call, interview, note) to a CRM contact, using a type name from the fixed taxonomy. Never de-duplicated, so do not blindly retry.CRM: 1 of 500/day
crm_list_interactionsRead-only timeline of one CRM contact's interactions, newest first, each with its type, date, note, and tags. Paginated on a hasMore flag.CRM: 1 of 500/day
crm_list_interaction_typesRead-only list of the valid interaction-type names for `crm_log_interaction`, grouped by category. The taxonomy is a fixed global list.CRM: 1 of 500/day
crm_upload_resumeAttach a PDF, DOC, or DOCX resume (inline base64, up to 10 MB) to a CRM contact and queue it for parsing. Parsing is asynchronous and fills only the contact's empty fields.CRM: 1 of 500/day, plus 1 of 50/key/day uploads

create_job defaults to a reviewable draft and publishes only when you explicitly ask it to. Its idempotency key is derived from the request content, so retrying with identical arguments within 24 hours returns the already-created job instead of a duplicate. search_candidates is read-only and returns no contact details. list_webhook_endpoints is read-only and never returns signing secrets; endpoints are created, verified, rotated, and deleted in the CazVid app or the REST API. search_jobs is read-only and returns public job posts, each with an applyUrl and never any hiring-manager contact details. In the CRM, crm_upsert_contact de-duplicates by email or phone within the workspace, so a retry that carries one of those returns the existing contact rather than a duplicate (a name-only create has no de-duplication key, so retrying it can produce a second contact); crm_log_interaction is never de-duplicated, so do not blindly retry a call that may already have succeeded; and crm_delete_contact is a soft delete that archives the contact along with its interactions and list memberships.

Quotas and keys

The MCP server uses the same CazVid Developer API key and the same per-organization daily quotas as the REST APIs. There is nothing new to provision.

  • Job Builder: 10 successful preview_job or create_job calls per organization per UTC day.
  • Candidate Search: 100 search_candidates calls per organization per UTC day, plus a 20-per-minute burst limit.
  • Webhooks: list_webhook_endpoints consumes no quota. The webhook family's cap is on event deliveries, not on this tool - up to 5,000 deliveries per organization per day.
  • Job Search: 500 search_jobs calls per organization per UTC day, plus a 30-per-minute burst limit.
  • CRM: 500 crm_* calls per organization per UTC day, plus a 30-per-minute burst limit. This is a separate quota from the other families, and every metered call counts, reads included. crm_upload_resume also consumes 1 of a separate resume-upload quota of 50 per API key per UTC day.
  • list_api_usage consumes no quota and reports all five families' used, remaining, and reset times.
  • All quotas reset at UTC midnight. A rate-limited tool call returns the reset time and points you at list_api_usage.
  • Keys come from Profile > Developer API in the CazVid app. The job-search scope is free - any registered CazVid account can mint a key for it. The job-builder, candidate-search, and crm scopes require a Platinum, Diamond, or Enterprise plan, and webhooks require a Platinum plan or higher. One key can carry every scope your plan allows.

For the full request and response contracts, see the Job Builder API docs, the Candidate Search API docs, the Webhooks API docs, the Job Search API docs, and the CRM API docs.

Candidate data is subject to the acceptable-use terms.

Connecting without a key

Connecting and listing tools works without a key so connector setup never breaks. Calling a tool without a key does not error hard - it returns clear guidance on how to add your key.

  • The handshake (initialize) and tools/list succeed with no key, so a client can complete setup and show the fifteen tools.
  • A tool call made without a key returns a readable message explaining how to connect, not a protocol error.
  • Once a key is supplied (header or path form), the same tool call runs against your organization's quota.