Onboarding MCP

A public, auth-free MCP server that creates a new Evidal company from an AI agent session. Point Claude Code, Cursor, or any MCP-aware client at the server URL, call onboarding_start, click the verify-email link you receive, then call onboarding_complete to mint your first API key. Once you have a key, switch to the hiring-manager MCP.

Connect

Server URL: https://app.evidal.ai/api/mcp/onboarding

claude mcp add \
  --transport http \
  evidal-onboarding \
  https://app.evidal.ai/api/mcp/onboarding

No Authorization header — this server is intentionally public so an agent with no prior Evidal state can bootstrap a company.

Tools (4)

onboarding_start

Start an agentic company onboarding session. Sends a verification email to owner_email with a verification link (it verifies the request only — it does NOT sign the owner in; a separate dashboard sign-in email is sent by onboarding_complete). Returns { session_id, status, verification_email_sent_to, expires_at }. No auth required. Rate limits per client IP: onboarding_start / onboarding_complete / onboarding_cancel share 20/hr; initialize, tools/list, ping and onboarding_status polls share 120/hr — poll onboarding_status no more than once every 60 seconds. Per owner_email: 3 sessions per rolling 24h, counted regardless of status (cancelling does not free a slot). A global 100/hr circuit breaker covers the mutating tools. A 429 arrives as JSON-RPC error -32002 with data.retry_after_seconds. slug must be lowercase [a-z0-9-], <=64 chars, not reserved, not on the brand blocklist (unless owner_email domain matches). domain is an OPTIONAL apply hostname the company controls (e.g. evidal.acme.com — a subdomain, not the corporate apex) and must not already belong to another company; leave it out to use the default candidate page https://evidal.ai/{slug} (production never serves {slug}.evidal.ai). invite_emails accepts at most 5 addresses; invite further teammates from the dashboard after onboarding completes. EVI-237: lever_api_key and lever_subdomain are OPTIONAL; pass both to auto-connect Lever at onboarding_complete. If the Lever key fails validation, the company is still created and lever_connect_result=validation_failed is returned.

Parameters

owner_email *
string (email)
company_name *
string
slug ?
string
domain ?
string
invite_emails ?
array<string (email)>
initial_role ?
object
lever_api_key ?
string
lever_subdomain ?
string

* required, ? optional

onboarding_status

Poll the status of an onboarding session. Returns { status, company_slug?, onboarding_progress }. `company_slug` is only populated once status=completed. Statuses: pending_email_verification | verified | completed | expired | cancelled. Poll no more than once every 60 seconds (120 polls/hr per IP); the human may take a while to open the email.

Parameters

session_id *
string (uuid)

* required, ? optional

onboarding_complete

destructive

Completes onboarding after the user confirms the verification page. Only valid when session status='verified'. Creates the company (slug_tier='draft', released at slug_expires_at unless a domain is verified or billing is activated), the owner membership, and the optional initial role (role_status='trial' with 3 free evaluations). Emails the owner a single-use dashboard sign-in link (owner_sign_in.status tells you whether it went out). Returns the API key (shown ONCE — save it immediately), MCP connection details, links.candidate_page (the URL candidates can use NOW — https://evidal.ai/{slug}; never present {slug}.evidal.ai as working, production does not serve it), and a guided setup sequence. Walk the user through the setup steps in order: (1) register the hiring-manager MCP server, (2) upload company logo, (3) optionally set up a custom domain — BOTH the CNAME and the _evidal-verify TXT record in setup[].dns_records are required before check_dns verifies, (4) publish the first role (free; billing can wait until the 3 free evaluations are used). Each step includes the tool name and fields needed.

Parameters

session_id *
string (uuid)

* required, ? optional

onboarding_cancel

destructive

Cancel a pending onboarding session. Idempotent — no-op if the session is already in a terminal state (cancelled / completed / expired). Frees the proposed slug for other callers.

Parameters

session_id *
string (uuid)

* required, ? optional