Recruit CRM MCP
Click on "Deploy 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 MCP find 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 + testsRelated MCP server: trackly-cli
Tools
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.
Available Tools
53 toolsassign_candidateB
Assign a candidate to a job via POST /v1/candidates/{slug}/assign.
The target job is passed as a query param. No body is needed.
Inputs: candidate_slug (required), job_slug (required). Returns: Compact success response from a write tool.
create_candidateC
Create a candidate via POST /v1/candidates.
first_name is the only required field. current_organization_slug
links the candidate to an existing company record; current_organization
is the free-text fallback.
Inputs: first_name (required), last_name, email, contact_number, +13 more. Returns: Compact success response from a write tool.
create_companyA
Create a company via POST /v1/companies.
company_name is the only required field. Use list_industries to
resolve industry_id and list_company_custom_fields to discover
valid custom_fields field_ids.
Inputs: company_name (required), about_company, website, industry_id, +6 more. Returns: Compact success response from a write tool.
create_contactA
Create a contact via POST /v1/contacts.
first_name and last_name are required. company_slug accepts a
comma-separated string for multi-company associations. Use
list_contact_stages to resolve stage_id.
Inputs: first_name (required), last_name (required), email, contact_number, +9 more. Returns: Compact success response from a write tool.
create_jobA
Create a job requisition via POST /v1/jobs.
Seven fields are required: name, company_slug, contact_slug,
number_of_openings, currency_id, enable_job_application_form,
job_description_text.
job_status codes: 0=Closed, 1=Open, 2=On Hold, 3=Cancelled.
job_location_type codes: 0=On-site, 1=Remote, 2=Hybrid.
Use list_hiring_pipelines for hiring_pipeline_id and
list_job_custom_fields for custom_fields.
Inputs: name (required), company_slug (required), contact_slug (required), number_of_openings (required), +14 more. Returns: Compact success response from a write tool.
create_noteA
Create a note via POST /v1/notes.
description accepts Markdown — paragraphs, - bullets, **bold**,
*italic*, and [links](url) render correctly in the Recruit CRM UI.
The MCP layer converts to HTML before posting and back to Markdown on read.
related_to is the primary anchor entity. Use associated to cross-link
the note to additional candidates/companies/contacts/jobs/deals.
Inputs: description (required), related_to (required), note_type_id, associated. Returns: Compact success response from a write tool.
create_taskB
Create a task via POST /v1/tasks.
start_date uses ISO 8601 (e.g. 2025-04-29T18:30:00Z).
related_to is optional but recommended for easy discovery.
reminder accepts: -1 (no reminder), 0, 15, 30, 60, 1440 (minutes before);
defaults to 1440 (1 day before).
description accepts Markdown — converted to HTML before POST so the
Recruit CRM UI renders bullets/bold/links correctly.
Inputs: title (required), start_date (required), description, reminder, +4 more. Returns: Compact success response from a write tool.
delete_noteA
Delete a note via DELETE /v1/notes/{id}.
Returns a WriteResult with the deleted id for trace.
Inputs: note_id (required). Returns: Compact success response from a write tool.
get_assigned_candidatesA
Get candidates assigned to a specific job and their hiring stage.
Returns candidate summaries with their current hiring status for the given job. Use status_id to filter by a specific hiring stage.
Inputs: job_slug (required), status_id, limit. Returns: result
get_candidateB
Get full profile details for a specific candidate by slug or ID.
Inputs: candidate_id (required). Returns: object
get_companyA
Get full details for a specific company by slug.
Inputs: company_slug (required). Returns: object
get_contactA
Get full details for a specific contact by slug.
Inputs: contact_slug (required). Returns: object
get_jobA
Get full details for a specific job by slug or ID.
Inputs: job_id (required). Returns: object
get_meetingA
Get full details for a specific meeting by ID.
The description field is normalized from the CRM's stored HTML to
Markdown before being returned to the model.
Inputs: meeting_id (required). Returns: object
get_noteA
Get full details for a specific note by ID.
The description field is normalized from the CRM's stored HTML to
Markdown before being returned to the model.
Inputs: note_id (required). Returns: object
get_taskA
Get full details for a specific task by ID.
The description field is normalized from the CRM's stored HTML to
Markdown before being returned to the model.
Inputs: task_id (required). Returns: object
list_candidate_custom_fieldsA
List all candidate custom fields defined in the account.
Returns {id, label} pairs where id is the field_id and label is the field name.
Inputs: no named parameters. Returns: result
list_company_custom_fieldsA
List all company custom fields defined in the account.
Returns {id, label} pairs where id is the field_id and label is the field name.
Inputs: no named parameters. Returns: result
list_contact_custom_fieldsA
List all contact custom fields defined in the account.
Returns {id, label} pairs where id is the field_id and label is the field name.
Inputs: no named parameters. Returns: result
list_contact_stagesA
List sales pipeline stages (contact stages).
Returns {id, label} pairs for each stage in the sales pipeline.
Inputs: no named parameters. Returns: result
list_hiring_pipelinesA
List all hiring pipelines configured in the account.
Pipeline ID 0 is the master hiring pipeline. Use list_hiring_pipeline_stages with the returned id to inspect stages for a specific pipeline.
Inputs: no named parameters. Returns: result
list_hiring_pipeline_stagesA
List hiring pipeline stages for a given pipeline.
Use pipeline_id=0 for the master hiring pipeline. Returns {id, label} stage entries suitable for filtering assigned candidates by hiring stage.
Inputs: pipeline_id (required). Returns: result
list_industriesA
List all industries available in the account.
Returns {id, label} pairs suitable for populating a company's industry_id.
Inputs: no named parameters. Returns: result
list_job_custom_fieldsA
List all job custom fields defined in the account.
Returns {id, label} pairs where id is the field_id and label is the field name.
Inputs: no named parameters. Returns: result
list_jobsA
List job requisitions without any filters.
Returns jobs in reverse chronological order. Use search_jobs instead when you need to filter by status or other fields.
Inputs: limit. Returns: result
list_meeting_typesA
List all meeting types available in the account.
Returns {id, label} pairs suitable for passing as meeting_type_id on meeting writes.
Inputs: no named parameters. Returns: result
list_note_typesA
List all note types available in the account.
Returns {id, label} pairs suitable for passing as note_type_id on note writes.
Inputs: no named parameters. Returns: result
list_task_typesA
List all task types available in the account.
Returns {id, label} pairs suitable for passing as task_type_id on task writes.
Inputs: no named parameters. Returns: result
list_usersA
List all team members/users.
Useful for discovering owner IDs to use with the search_jobs owner_id filter. Returns id, name, email, and role for each user.
Inputs: no named parameters. Returns: result
log_meetingA
Log a meeting via POST /v1/meetings.
Dates use ISO 8601 (e.g. 2025-04-29T18:30:00Z).
related_to is the primary anchor entity. Use associated to cross-link
the meeting to additional candidates/companies/contacts/jobs/deals.
attendee_users expects integer user IDs; attendee_contacts and
attendee_candidates expect slug strings.
reminder accepts: -1 (no reminder), 0, 15, 30, 60, 120, 1440 (minutes before).
do_not_send_calendar_invites defaults to True — safe for historical logging;
set False to actually send invites to attendees.
description accepts Markdown — converted to HTML before POST so the
Recruit CRM UI renders bullets/bold/links correctly.
Inputs: title (required), start_date (required), end_date (required), related_to (required), +10 more. Returns: Compact success response from a write tool.
pingA
Check that the Recruit CRM MCP server is running and configured.
Inputs: no named parameters. Returns: object
report_issueA
Build a prefilled GitHub issue URL the user can click to report a bug.
Use when the user wants to flag unexpected behavior in this MCP server (not a Recruit CRM data issue). Returns a URL that opens the public repo's new-issue form pre-populated with the summary, last error, and environment details — the user clicks it and submits in their browser.
Pass any recent exception text via last_error so the report includes
triage detail. Long inputs are truncated to fit GitHub's URL length limit.
Inputs: summary (required), last_error, additional_context. Returns: object
search_candidatesA
Search for candidates by name, email, location, or date range.
Provide at least one filter for targeted results. Filters are combined with AND logic. With no filters, returns a paginated list of recent candidates. Date params use YYYY-MM-DD format. Returns a list of matching candidate summaries.
Inputs: first_name, last_name, email, state, +6 more. Returns: result
search_companiesA
Search for companies by name, date range, or owner.
Provide at least one filter for targeted results. Filters are combined with AND logic. With no filters, returns a paginated list of recent companies. Date params use YYYY-MM-DD format. sort_by accepts 'createdon' or 'updatedon'. sort_order accepts 'asc' or 'desc'. Set exact_search=True for exact name matching (default is fuzzy/like matching). Use list_users to find valid owner_id values.
Inputs: company_name, created_from, created_to, updated_from, +6 more. Returns: result
search_contactsA
Search for contacts by name, email, company, or date range.
Provide at least one filter for targeted results. Filters are combined with AND logic. With no filters, returns a paginated list of recent contacts. Date params use YYYY-MM-DD format.
Inputs: first_name, last_name, email, linkedin, +8 more. Returns: result
search_jobsA
Search for jobs by status, name, location, company, date range, or owner.
Filters are optional and combined with AND logic. Status accepts a label: 'Open', 'On Hold', 'Closed', 'Placed', 'Canceled', 'Refill'. Date params use YYYY-MM-DD format. Use list_users to find valid owner_id values. With no filters, returns an empty list.
Inputs: status, name, city, country, +7 more. Returns: result
search_meetingsA
Search for meetings by title, date range, or owner.
Provide at least one filter for targeted results. Filters are combined with AND logic. With no filters, returns a paginated list of recent meetings. Date params use YYYY-MM-DD format. Use list_users to find valid owner_id values.
Inputs: title, created_from, created_to, updated_from, +5 more. Returns: result
search_notesA
Search for notes by date range.
Provide at least one filter for targeted results. Filters are combined with AND logic. With no filters, returns a paginated list of recent notes. Date params use YYYY-MM-DD format.
Inputs: created_from, created_to, updated_from, updated_to, +1 more. Returns: result
search_tasksA
Search for tasks by title, date range, or owner.
Provide at least one filter for targeted results. Filters are combined with AND logic. With no filters, returns a paginated list of recent tasks. Date params use YYYY-MM-DD format. Use list_users to find valid owner_id values.
Inputs: title, created_from, created_to, updated_from, +5 more. Returns: result
set_candidate_custom_fieldsB
Set custom-field values on a candidate without touching any standard fields.
Inputs: slug (required), fields (required). Returns: Compact success response from a write tool.
set_company_custom_fieldsA
Set custom-field values on a company without touching any standard fields.
Thin wrapper over update_company — the edit endpoint accepts
custom_fields inline (there is no separate associated-fields endpoint
for companies).
Inputs: slug (required), fields (required). Returns: Compact success response from a write tool.
set_contact_custom_fieldsB
Set custom-field values on a contact without touching any standard fields.
Inputs: slug (required), fields (required). Returns: Compact success response from a write tool.
set_job_custom_fieldsA
Set custom-field values on a job without touching any standard fields.
Inputs: slug (required), fields (required). Returns: Compact success response from a write tool.
unassign_candidateB
Unassign a candidate from a job via POST /v1/candidates/{slug}/unassign.
Inputs: candidate_slug (required), job_slug (required). Returns: Compact success response from a write tool.
update_candidateB
Update a candidate via partial POST to /v1/candidates/{slug}.
Only non-None fields are forwarded; omitted fields are preserved server-side
(the API's required first_name is kept automatically).
Inputs: slug (required), first_name, last_name, email, +14 more. Returns: Compact success response from a write tool.
update_companyA
Update a company via partial POST to /v1/companies/{slug}.
Only non-None fields are forwarded; omitted fields are preserved server-side
(the API's required company_name is kept automatically).
Inputs: slug (required), company_name, about_company, website, +7 more. Returns: Compact success response from a write tool.
update_contactA
Update a contact via partial POST to /v1/contacts/{slug}.
Only non-None fields are forwarded; omitted fields are preserved server-side.
Inputs: slug (required), first_name, last_name, email, +10 more. Returns: Compact success response from a write tool.
update_hiring_stageA
Update a candidate's hiring stage for a specific job.
POST /v1/candidates/{candidate_slug}/hiring-stages/{job_slug}. Use
list_hiring_pipeline_stages to resolve status_id for the correct
pipeline.
Inputs: candidate_slug (required), job_slug (required), status_id (required), remark, +2 more. Returns: Compact success response from a write tool.
update_jobA
Update a job requisition via partial POST to /v1/jobs/{slug}.
Only non-None fields are forwarded; omitted fields are preserved server-side.
Only the fields most commonly edited are exposed; use the full create_job
surface area if you need to change other fields.
Inputs: slug (required), name, job_status, job_location_type, +5 more. Returns: Compact success response from a write tool.
update_meetingA
Update a meeting via partial POST to /v1/meetings/{id}.
Only non-None fields are forwarded; omitted fields are preserved server-side.
Attendee and association lists are joined into comma-separated strings to
match the create-endpoint shape. description accepts Markdown.
Inputs: meeting_id (required), title, start_date, end_date, +11 more. Returns: Compact success response from a write tool.
update_noteA
Update an existing note via POST /v1/notes/{id} — partial update.
Only provided fields are sent; omitted fields are preserved server-side.
description accepts Markdown (see create_note).
Use associated to add cross-links to additional candidates/companies/
contacts/jobs/deals.
Inputs: note_id (required), description, note_type_id, associated. Returns: Compact success response from a write tool.
update_taskA
Update an existing task via partial POST to /v1/tasks/{id}.
Only non-None fields are forwarded; omitted fields are preserved.
task_type_id is the integer ID from list_task_types; omit to keep
current type. description accepts Markdown.
NOTE: marking a task complete is not supported by the
Recruit CRM API on this endpoint — the status field is silently
ignored (see CLAUDE.md). Delete the task or use the RCRM UI instead.
Inputs: task_id (required), title, start_date, description, +2 more. Returns: Compact success response from a write tool.
upload_fileA
Upload a file to Recruit CRM via POST /v1/files (multipart).
file_url must be a publicly reachable URL — the Recruit CRM backend
fetches the bytes itself. folder is the destination folder name (a
sensible default is Uploads). related_to anchors the file to a
specific CRM entity.
Inputs: file_url (required), related_to (required), folder. Returns: Compact success response from a write tool.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 53 tools
Each tool targets a distinct resource-action pair, with clear descriptions avoiding overlap. Terms like assign vs. update_hiring_stage and list vs. search are well-differentiated.
The vast majority follow a consistent verb_noun snake_case pattern. Minor deviations include ping and report_issue, which are not data operations but are still verb_noun and do not significantly disrupt consistency.
53 tools is far beyond the typical well-scoped range (3-15). While a CRM may require many endpoints, this large surface area is likely to overwhelm agents and reduce coherence.
Core CRUD operations exist for most entities, but there are notable gaps: missing delete tools for candidates, companies, contacts, jobs, tasks, and meetings, and missing list_all tools for candidates, companies, and contacts. Search tools partially fill the gap but cannot replace simple listing.
Maintenance
Related MCP Connectors
MCP server for LeadDelta — manage LinkedIn connections and CRM data via AI assistants.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceThis MCP server provides hiring automation tools for recruitment processes. It enables users to generate job descriptions, score CVs, create interview questions, benchmark salaries, and draft offer letters through natural language interactions.16 npm31 PyPIMIT

trackly-cliofficial
AlicenseNot gradedqualityBmaintenanceMCP server for job search and application tracking, enabling AI agents to search jobs, get details, manage applications, and find contacts across 128K+ jobs and 1,900+ companies.839 npm3MIT
@kula-ai/mcp-serverofficial
AlicenseAqualityCmaintenanceMCP server enabling AI assistants to connect to Kula recruiting API for managing jobs, candidates, applications, webhooks, and more.84401 npmMIT- AlicenseNot gradedqualityDmaintenanceMCP server for Hunaras, an AI-native recruiting platform that enables candidates and employers to manage jobs, applications, assessments, and talent sourcing through natural language.5 npmMIT