https://mcp.heymilo.ai/mcp. Any MCP-compatible client
can connect to it and let users query HeyMilo with natural language
(search candidates, summarize pipelines, pull interview reports) without
writing custom integration code.
The server is read-only. It exposes the same data surfaces an
authenticated user can see in app.heymilo.ai, scoped to whichever
HeyMilo workspaces the authenticated identity has access to. To create
postings, ingest candidates, or modify workflows, call the corresponding
REST endpoint on https://api.heymilo.ai directly. The
milo_capabilities MCP prompt describes every write endpoint with curl
examples your LLM can read and recommend.
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
int_abc123.” - “How do I create a new interviewer?” (load the
milo_capabilitiesprompt first, see Available tools, then the LLM will hand you a ready-to-paste curl example)
Authentication
The server accepts two auth methods, both passed asAuthorization: Bearer <token>:
Sign in with HeyMilo (OAuth)
Recommended for end-user clients. The MCP client discovers the OAuth flow automatically viahttps://mcp.heymilo.ai/.well-known/oauth-authorization-server, then
redirects through the HeyMilo login screen. After sign-in, the
client receives access and refresh tokens tied to that HeyMilo user.
claude.ai
- Settings → Connectors → Add custom connector.
- Server URL:
https://mcp.heymilo.ai/mcp. - Connect. claude.ai walks you through the HeyMilo login.
- The connector lights up; HeyMilo tools appear in any new chat’s tools menu.
Claude Desktop
Edit~/Library/Application Support/Claude/claude_desktop_config.json:
Cursor
~/.cursor/mcp.json:
Claude Code
Add the server to~/.claude.json (or run claude mcp add):
/mcp → heymilo → Authenticate to
complete the HeyMilo login. Claude Code (like other native CLI clients)
uses an ephemeral loopback port for its OAuth callback; the server
handles this automatically, with no per-port configuration needed.
ChatGPT
ChatGPT can connect to remote MCP servers like HeyMilo, but only through developer mode, which exposes full MCP connector support. Developer mode is available on Plus, Pro, Business, Enterprise, and Education plans (web), and ChatGPT only supports remote MCP servers reachable over HTTPS — which is exactly what HeyMilo hosts.- Enable developer mode. In ChatGPT, go to Settings → Apps & Connectors → Advanced settings and turn on Developer mode.
- Add the connector. Back in Settings → Apps & Connectors,
choose Create (create app / add custom connector) and fill in:
- Name:
HeyMilo - MCP Server URL:
https://mcp.heymilo.ai/mcp - Authentication: OAuth
- Name:
- Check the box confirming you trust the provider, then create the connector.
- ChatGPT discovers the OAuth flow automatically (the server supports OAuth metadata discovery and dynamic client registration) and walks you through the HeyMilo login. After sign-in, the HeyMilo tools are available in chat — open the + / Developer mode tools menu and enable them for a conversation.
Google Antigravity (Gemini)
Google Antigravity shares a single MCP configuration across its IDE and CLI at~/.gemini/config/mcp_config.json. You can edit that file directly or
use the in-app Manage MCP Servers → View raw config editor.
API key
Use this for non-interactive clients (scripts, server-to-server agents) where there isn’t a human to walk through OAuth.- In
app.heymilo.ai, Integrations → API, generate a key. - Pass it as a Bearer token (or in the legacy
X-API-KEYheader):
Multi-workspace access
Some HeyMilo users belong to more than one workspace. When you sign in via OAuth, the resulting token covers every active workspace the user is a member of. All tools accept an optionalworkspace_id argument:
- Omit it → the tool defaults to your “primary” / first-listed workspace.
- Pass it explicitly → scopes the call to that specific workspace.
listWorkspaces tool. The
LLM can also use it implicitly: when a user asks about “Acme”, the
model calls listWorkspaces, finds the matching workspace_id, and
includes it in the next tool call.
API-key auth is single-workspace by definition: one key = one
workspace, and workspace_id is fixed.
Available tools
Every tool is read-only. Apart fromlistWorkspaces (a custom tool that
takes no arguments), the set is generated directly from the
Public API v2 GET endpoints —
so it always matches what the API exposes — and each generated tool accepts
the optional workspace_id argument described above.
To enumerate them programmatically, call the MCP
tools/list method (see
the API-key curl example above).
Write endpoints (create posting, ingest candidate, archive, etc.) are
not callable as MCP tools. To help LLMs guide users through writes, the
server exposes a prompt named milo_capabilities (and a matching
milo://capabilities resource) that returns a structured description of
the full v2 surface, including writes, with curl examples and links
back to this documentation.
To explore everything the HeyMilo API can do, browse the
Public API documentation,
or invoke the
/mcp__heymilo__milo_capabilities prompt from your MCP
client for the full catalogue with ready-to-run curl examples.Discovery endpoints
For programmatic clients building against the server:
Unauthenticated requests to
/mcp respond with
WWW-Authenticate: Bearer realm="mcp.heymilo.ai", resource_metadata="https://mcp.heymilo.ai/.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, the user’s workspace memberships are re-checked against our datastore and cached briefly (a few minutes), so revoked access propagates within that window. - Strict workspace scoping. A user can only call tools with
workspace_idvalues present in their token’s accessible workspaces. Tool calls server-side scope every database query byworkspace_id. - Tokens are short-lived. Access and refresh token lifetimes are enforced by HeyMilo’s identity provider, and refresh tokens can be rotated on use.
- All HTTPS, all the time. TLS via managed certificates.
Troubleshooting
Claude doesn't see any HeyMilo tools
Claude doesn't see any HeyMilo 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
listPostings, getInterviewData, etc.`401` or `403` when calling tools
`401` or `403` when calling tools
A
401 means missing or expired credentials. For OAuth, your access
token may have expired — disconnect and reconnect from your client’s
connector settings.
An invalid or revoked API key returns 403; generate a new one in
app.heymilo.ai → Integrations → API.Tool call says 'workspace_id is not in your accessible workspaces'
Tool call says 'workspace_id is not in your accessible workspaces'
The LLM passed a
workspace_id you don’t have access to. Have it
call listWorkspaces 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.