https://mcp.alex.com/mcp. Any MCP-compatible client can connect to it and let users query Alex with natural language — search candidates, summarize pipelines, pull interview reports, ask product questions — without writing custom integration code.
The server is read-only. It exposes the same data surfaces an authenticated user can see in app.alex.com, scoped to whichever Alex companies the authenticated identity has access to.
What you can ask
- “Who are my top 10 candidates for the Senior Backend Engineer role?”
- “Summarize last month’s interviews — completion rate, average score, decisions.”
- “What’s the candidate pipeline for the Atlanta Sales Lead position?”
- “Pull the interview report for jane@acme.com.”
- “How do I integrate Alex with Bullhorn?” (answered from Alex documentation)
Authentication
The server accepts two auth methods, both passed asAuthorization: Bearer <token>:
Sign in with Alex (OAuth)
Recommended for end-user clients. The MCP client discovers the OAuth flow automatically viahttps://mcp.alex.com/.well-known/oauth-authorization-server, then redirects through the Alex login screen at Auth0. After sign-in, the client receives access and refresh tokens tied to that Alex user.
claude.ai
- Settings → Connectors → Add custom connector.
- Server URL:
https://mcp.alex.com/mcp. - Connect. claude.ai walks you through the Alex login.
- The connector lights up; Alex tools appear in any new chat’s tools menu.
Claude Desktop
Edit~/Library/Application Support/Claude/claude_desktop_config.json:
Cursor
~/.cursor/mcp.json:
Token lifetime
Access tokens expire after one hour. Refresh tokens last seven days and rotate on use. Clients handle the refresh automatically; you’ll only re-authenticate if the refresh token expires (week of inactivity) or you remove the connector.API key
Use this for non-interactive clients — scripts, server-to-server agents, anywhere there isn’t a human to walk through OAuth.- In
app.alex.com, Settings → API Keys, generate a key (or ask your Alex admin). - Pass it as a Bearer token:
Multi-company access
Some Alex users belong to more than one company (commonly: staffing agencies that operate multiple Alex tenants). When you sign in via OAuth, the resulting token covers every active company the user is a member of. Most tools accept an optionalcompanyId argument:
- Omit it → the tool defaults to your “primary” / first-listed company. Convenient when there’s only one.
- Pass it explicitly → scopes the call to that specific company. Useful when a user has multiple memberships and asks “show me Acme’s open jobs vs. Beta’s”.
listCompanies tool. The LLM can also use it implicitly: when a user asks about “Acme”, the model calls listCompanies, finds the matching companyId, and includes it in the next tool call.
API-key auth is single-company by definition — one key authenticates as one company, and companyId is fixed.
Discovery endpoints
For programmatic clients building against the server:
Unauthenticated requests to
/mcp respond with WWW-Authenticate: Bearer realm="https://mcp.alex.com", resource_metadata="https://mcp.alex.com/.well-known/oauth-protected-resource" so clients can discover OAuth on first contact.
Security model
- Per-request authorization. Every
/mcprequest re-validates the token: for OAuth, we re-confirm the user’s company memberships against the database on each call, so revoking a user’s access takes effect within (at most) one access-token TTL. - Strict company scoping. A non-admin user can only call tools with
companyIdvalues present in their token’s company list. Tools server-side scope every database query bycompanyId. - Tokens are short-lived. Access tokens expire after 1 hour; refresh tokens after 7 days. Compromise blast radius is bounded.
- All HTTPS, all the time. TLS via Let’s Encrypt; HSTS enabled.
Troubleshooting
Claude doesn't see any Alex tools
Claude doesn't see any Alex tools
Check that your config is valid JSON and restart your client fully (Cmd-Q on macOS). The tools panel in any chat should list
searchCandidates, getJobDetails, etc.OAuth flow ends with 'No active Alex account is associated with this email'
OAuth flow ends with 'No active Alex account is associated with this email'
The email you signed into Auth0 with doesn’t match an active Alex user, or the user has been soft-deleted. Confirm with your Alex admin that the user exists and is active.
Tool call says 'companyId is not in your accessible companies'
Tool call says 'companyId is not in your accessible companies'
The LLM passed a
companyId you don’t have access to. Have it call listCompanies first to see what’s available, then retry with one of those IDs.Tool calls hang or time out
Tool calls hang or time out
Searches over very large candidate pools can take up to 60 seconds. Increase your client’s tool-call timeout if you’re hitting limits.