Recruit CRM MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Recruit CRM MCPfind candidates who know React and live in New York"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Recruit CRM MCP
MCP (Model Context Protocol) server for Recruit CRM, enabling AI assistants to search candidates, view jobs, and manage recruiting workflows.
Quick Start
One-Click Install (recommended)
macOS / Linux — run in Terminal:
curl -LsSf https://raw.githubusercontent.com/ebragas/recruitcrm-mcp/main/install.sh | bashWindows — run in PowerShell:
powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/ebragas/recruitcrm-mcp/main/install.ps1 | iex"The installer will:
Install
uvif you don't have itPrompt for your Recruit CRM API key
Back up your existing Claude Desktop config
Add the Recruit CRM MCP server entry
macOS / Linux:
curl -LsSf https://raw.githubusercontent.com/ebragas/recruitcrm-mcp/main/install.sh -o install.sh
cat install.sh # review the script
bash install.shWindows:
Invoke-WebRequest -Uri https://raw.githubusercontent.com/ebragas/recruitcrm-mcp/main/install.ps1 -OutFile install.ps1
Get-Content install.ps1 # review the script
powershell -ExecutionPolicy Bypass -File .\install.ps1Already have
uv? You can skip the bootstrap and run the installer directly:uvx --from recruit-crm-mcp recruit-crm-mcp-install
Manual Setup
If you prefer to configure manually, add to your claude_desktop_config.json:
{
"mcpServers": {
"recruit-crm": {
"command": "uvx",
"args": ["--refresh-package", "recruit-crm-mcp", "recruit-crm-mcp"],
"env": {
"RECRUIT_CRM_API_KEY": "your-api-key-here"
}
}
}
}Why
--refresh-package? Without it,uvxcaches the installed venv and reuses it indefinitely — you'd stay on whichever version was installed first, even after we publish bug fixes. The flag forcesuvxto re-fetch the package's PyPI index entry on each Claude Desktop launch (~100 ms warm) and pull a newer version when available. Auto-updates without you running anything.
Installing a pre-release (test) build
Pre-release builds (e.g. 0.16.0rc1) are published to PyPI for internal
testing. They are not picked up by the default installer or by a bare
uvx recruit-crm-mcp — you have to pin them explicitly.
To run a pre-release once from the command line:
uvx recruit-crm-mcp@0.16.0rc1To use a pre-release with Claude Desktop, edit claude_desktop_config.json
and change the args entry to include the version pin:
{
"mcpServers": {
"recruit-crm": {
"command": "uvx",
"args": ["recruit-crm-mcp@0.16.0rc1"],
"env": {
"RECRUIT_CRM_API_KEY": "your-api-key-here"
}
}
}
}Fully quit and reopen Claude Desktop (the app keeps running in the dock after closing the window).
To roll back to stable, set args back to ["--refresh-package", "recruit-crm-mcp", "recruit-crm-mcp"] (or pin a specific stable like ["recruit-crm-mcp@0.15.0"]) and restart Claude Desktop.
Why other users are safe.
uvx's default resolver strategy is--prerelease=if-necessary: pre-releases are skipped unless no stable version satisfies the spec. Becauserecruit-crm-mcphas a stable release on PyPI, the unpinneduvx recruit-crm-mcpin the default installer's config resolves to the latest stable and never picks up a pre-release. Only an explicit pin like@0.16.0rc1opts in.
Development
uv sync # install dependencies
make test # run tests
make lint # run linter
make check # run lint + testsTools
Tool | Description |
| Health check — verify the server is running and API key is configured |
Candidates
Tool | Description |
| Search candidates by name, email, LinkedIn, phone, state, country, or created/updated date range |
| Get full profile details for a candidate by slug/ID |
| Create a new candidate record |
| Update standard fields on an existing candidate |
| Set custom-field values on a candidate without touching standard fields |
Jobs
Tool | Description |
| List job requisitions in reverse chronological order |
| Search jobs by status, name, city, country, company, owner, or created/updated date range |
| Get full details for a job by slug/ID |
| Create a new job requisition (requires name, openings, company_slug, contact_slug, description, currency, application form flag) |
| Update standard fields on an existing job |
| Set custom-field values on a job without touching standard fields |
| List candidates assigned to a job (optionally filtered by hiring stage) |
Contacts
Tool | Description |
| Search contacts by name, email, LinkedIn, phone, company_slug, owner, or date range |
| Get full details for a contact by slug |
| Create a new contact record |
| Update standard fields on an existing contact |
| Set custom-field values on a contact without touching standard fields |
Companies
Tool | Description |
| Search companies by name, owner, off-limit flag, or date range (supports sort and exact match) |
| Get full details for a company by slug |
| Create a new company record |
| Update standard fields on an existing company |
| Set custom-field values on a company without touching standard fields |
Notes / Tasks / Meetings
Tool | Description |
| Search notes by |
| Get a note by ID |
| Create a note attached to a candidate, job, contact, or company |
| Delete a note by ID |
| Search tasks by title, owner, and created/updated/starting date ranges |
| Get a task by ID |
| Create a task attached to a related entity, with optional reminder |
| Update fields on an existing task |
| Search meetings by title, owner, and created/updated/starting date ranges |
| Get a meeting by ID |
| Log (create) a meeting against a related entity with attendees and timing |
| Update fields on an existing meeting |
Assignments
Tool | Description |
| Assign a candidate to a job |
| Remove a candidate-job assignment |
| Move a candidate's hiring stage on a job |
Files
Tool | Description |
| Attach a public-URL file to a candidate, company, contact, or job |
Users / Lookups
Tool | Description |
| List team members/users |
| Enumerate note type IDs and labels |
| Enumerate meeting type IDs and labels |
| Enumerate task type IDs and labels |
| List hiring pipelines configured in the account |
| Stages for a hiring pipeline (pipeline_id=0 = master) |
| List sales pipeline stages (contact stages) |
| List industries available in the account |
| Custom-field definitions for companies |
| Custom-field definitions for contacts |
| Custom-field definitions for jobs |
| Custom-field definitions for candidates |
Feedback
Tool | Description |
| Build a prefilled GitHub Issues URL the user can click to file a bug report |
Resources
Resource | Description |
| Get resume URL for a candidate |
| Get full job description |
Configuration
Set environment variables in your MCP client config (e.g. claude_desktop_config.json's env block):
Var | Required | Default | Description |
| yes | — | Recruit CRM API token. |
| no | unset | Your own Sentry project DSN. If set, tool-call exceptions and per-tool usage telemetry are auto-reported to that project. See Error reporting below. |
| no | unset | Fallback DSN if you already export it globally. |
| no |
| Sentry environment tag. |
| no |
| Sentry trace sample rate (0.0–1.0). Defaults to full sampling so the MCP Dashboard populates immediately. Lower it (e.g. |
Error reporting
Two complementary, fully optional channels for surfacing problems:
1. report_issue MCP tool (always available)
When something goes wrong and you want to send a structured bug report, ask Claude to "report this issue" or "file a bug." The MCP exposes a report_issue tool that builds a prefilled GitHub Issues URL — Claude returns the link, you click it, GitHub opens the new-issue form pre-populated with the summary, the last error, and your environment details. Submit it from your browser like any other issue. Works with any GitHub account; no token in the MCP, no collaborator access needed, repo is public.
2. Sentry auto-capture (bring-your-own-DSN)
If you want passive observability — every tool-call exception captured automatically with stack trace, span context, and HTTP breadcrumbs, plus a populated MCP Dashboard showing which tools your users actually call — set RECRUIT_CRM_MCP_SENTRY_DSN to a Sentry project DSN that you control. With no DSN set (the default), the MCP makes zero network calls to Sentry.
This is strictly bring-your-own-DSN. We do not publish or embed a project DSN. If you want this, sign up for a free Sentry account, create a Python project, copy its DSN, and put it in your MCP client config:
{
"mcpServers": {
"recruit-crm": {
"command": "uvx",
"args": ["--refresh-package", "recruit-crm-mcp", "recruit-crm-mcp"],
"env": {
"RECRUIT_CRM_API_KEY": "...",
"RECRUIT_CRM_MCP_SENTRY_DSN": "https://<key>@<org>.ingest.sentry.io/<project>"
}
}
}
}What you get in your Sentry project:
Errors. Tool name, exception type, stack trace, HTTPX breadcrumbs (URLs and status codes), MCP request/session IDs, and the package version.
Usage telemetry. Every tool invocation is captured as a span (
traces_sample_ratedefaults to1.0), tagged with tool name, arguments, result, duration, and transport. These populate Sentry's MCP Dashboard — per-tool request count, error rate, p95 latency, client distribution. This is how you find out which tools your users actually use.
Recruit CRM data flowing through tools (candidate names, emails, company info) will appear in span and event payloads — that's the point, since both errors and usage analysis are unhelpful without the data that triggered them. Because the DSN is yours, the data only goes to your Sentry project.
If transaction volume is a concern (free Sentry plans cap at 5K events/month), set RECRUIT_CRM_MCP_SENTRY_TRACES_RATE=0.2 for 20% sampling, or 0.0 to disable tracing entirely while keeping error capture.
Privacy
No telemetry by default. With no Sentry DSN configured, the MCP makes zero network calls to anyone except
api.recruitcrm.io.No DSN is bundled. We do not embed our own Sentry DSN — Sentry capture only works if you supply your own.
report_issueis explicit-consent. It only builds a clickable URL; nothing is sent until you submit the prefilled form in your browser.Public repo issues. Reports filed via
report_issueare publicly visible on GitHub. Don't paste secrets or PII you wouldn't want public.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ebragas/recruitcrm-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server