CATS MCP by usefulapi

Read CATS candidates, jobs and pipelines, and make explicitly confirmed recruiting changes.

Should I use this

Quality & Safety

A
Description quality
99%
Schema completeness
95%
Naming quality
79%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (2)

  • LOWTool 'cats_list_candidate_attachments' name length outside 3-30 rangein cats_list_candidate_attachments
  • LOWTool 'cats_get_pipeline_status_history' name length outside 3-30 rangein cats_get_pipeline_status_history

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~6,984Tokens (tool definitions)
~1.5 KBTypical response size
Significant attention impact (5.46% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "cats-ats": {
      "url": "https://cats-ats.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://cats-ats.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (34)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢cats_get_site

The CATS site (account) this API key belongs to: id, mode (recruiter or employer) and subdomain. GET /site.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_list_users(page, per_page)

List the CATS users (recruiters) with id, name, title and access level. Use the ids as owner or assignee. GET /users.

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_list_candidates(page, per_page)

List candidates (personal data: name, emails, address, employer, skills, notes), one page at a time, max 100 per page. Use cats_search_candidates or cats_filter_candidates to find specific people. GET /candidates.

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_get_candidate(candidate_id)

One candidate by id (personal data). GET /candidates/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "candidate_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "CATS candidate id."
    }
  },
  "required": [
    "candidate_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_search_candidates(query, page, per_page)

Free-text search over candidates (name, email, skills, resume text...), paged. GET /candidates/search?query=.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Search text."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "query"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_filter_candidates(conditions, match, page, per_page)

Filter candidates by fields (read-only, although it is a POST): first_name, last_name, title, emails.primary, address.city/state/postal_code, country_code, current_employer, key_skills, notes, dates (date_created, date_modified), owner_id, is_hot... Each condition is {field, filter, value}; filters: exactly, contains, between {gte,lte}, greater_than, less_than, is_empty, geo_distance. Paged. POST /candidates/search.

Input Schema

{
  "type": "object",
  "properties": {
    "conditions": {
      "minItems": 1,
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "field": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "pattern": "^[A-Za-z0-9_.]+$",
            "description": "A filterable field, e.g. last_name, emails.primary, date_created, status_id."
          },
          "filter": {
            "type": "string",
            "enum": [
              "exactly",
              "contains",
              "between",
              "greater_than",
              "less_than",
              "is_empty",
              "geo_distance"
            ],
            "description": "exactly (string/int/boolean), contains (string), between ({gte,lte}), greater_than/less_than (int or date), is_empty (value true), geo_distance ({postal_code,distance,unit}); which fields allow which filters is per resource."
          },
          "value": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "object",
                "properties": {},
                "additionalProperties": {}
              }
            ],
            "description": "The value; its type depends on the filter."
          }
        },
        "required": [
          "field",
          "filter",
          "value"
        ]
      },
      "description": "One or more conditions."
    },
    "match": {
      "description": "How several conditions combine: all = AND (default), any = OR.",
      "type": "string",
      "enum": [
        "all",
        "any"
      ]
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "conditions"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_list_candidate_pipelines(candidate_id, page, per_page)

The jobs a candidate is in the pipeline for, with rating, workflow and current status id. GET /candidates/{id}/pipelines.

Input Schema

{
  "type": "object",
  "properties": {
    "candidate_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "CATS candidate id."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "candidate_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_list_candidate_activities(candidate_id, page, per_page)

The activity log of a candidate (calls, meetings, notes, pipeline changes), paged. GET /candidates/{id}/activities.

Input Schema

{
  "type": "object",
  "properties": {
    "candidate_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "CATS candidate id."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "candidate_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_list_candidate_tasks(candidate_id, page, per_page)

Tasks attached to a candidate. GET /candidates/{id}/tasks.

Input Schema

{
  "type": "object",
  "properties": {
    "candidate_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "CATS candidate id."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "candidate_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_list_candidate_attachments(candidate_id, page, per_page)

File names, sizes and whether each file is a resume, for a candidate's attachments. Metadata only: file contents are never downloaded. GET /candidates/{id}/attachments.

Input Schema

{
  "type": "object",
  "properties": {
    "candidate_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "CATS candidate id."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "candidate_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_list_jobs(page, per_page)

List job orders with title, location, company, recruiter, status and workflow ids, dates. Paged. GET /jobs.

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_get_job(job_id)

One job order by id, with its description. GET /jobs/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "job_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "CATS job id."
    }
  },
  "required": [
    "job_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_search_jobs(query, page, per_page)

Free-text search over job orders, paged. GET /jobs/search?query=.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Search text."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "query"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_list_job_pipelines(job_id, page, per_page)

The candidates in the pipeline of a job: pipeline id, candidate id, rating and current status id. Paged. GET /jobs/{id}/pipelines.

Input Schema

{
  "type": "object",
  "properties": {
    "job_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "CATS job id."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "job_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_list_job_statuses(page, per_page)

The statuses a job order can have (Active, OnHold, Closed...). GET /jobs/statuses.

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_list_pipelines(page, per_page)

List candidate-to-job pipelines (candidate id, job id, rating, workflow id, status id), paged. GET /pipelines.

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_get_pipeline(pipeline_id)

One pipeline (a candidate on a job) by id. GET /pipelines/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "pipeline_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "CATS pipeline id."
    }
  },
  "required": [
    "pipeline_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_filter_pipelines(conditions, match, page, per_page)

Filter pipelines by id, candidate_id, job_id, status_id, rating, date_created or date_modified (read-only, although it is a POST). Each condition is {field, filter, value}. Paged. POST /pipelines/search.

Input Schema

{
  "type": "object",
  "properties": {
    "conditions": {
      "minItems": 1,
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "field": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "pattern": "^[A-Za-z0-9_.]+$",
            "description": "A filterable field, e.g. last_name, emails.primary, date_created, status_id."
          },
          "filter": {
            "type": "string",
            "enum": [
              "exactly",
              "contains",
              "between",
              "greater_than",
              "less_than",
              "is_empty",
              "geo_distance"
            ],
            "description": "exactly (string/int/boolean), contains (string), between ({gte,lte}), greater_than/less_than (int or date), is_empty (value true), geo_distance ({postal_code,distance,unit}); which fields allow which filters is per resource."
          },
          "value": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "object",
                "properties": {},
                "additionalProperties": {}
              }
            ],
            "description": "The value; its type depends on the filter."
          }
        },
        "required": [
          "field",
          "filter",
          "value"
        ]
      },
      "description": "One or more conditions."
    },
    "match": {
      "description": "How several conditions combine: all = AND (default), any = OR.",
      "type": "string",
      "enum": [
        "all",
        "any"
      ]
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "conditions"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_get_pipeline_status_history(pipeline_id, page, per_page)

The status changes of a pipeline over time (status, who, when). GET /pipelines/{id}/statuses.

Input Schema

{
  "type": "object",
  "properties": {
    "pipeline_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "CATS pipeline id."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "pipeline_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_list_workflows(page, per_page)

The pipeline workflows (sets of statuses such as Contacted, Interviewing, Offered). GET /pipelines/workflows.

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_list_workflow_statuses(workflow_id, page, per_page)

The statuses of one pipeline workflow (id, title, prerequisites, triggers). Use the ids with cats_change_pipeline_status. GET /pipelines/workflows/{id}/statuses.

Input Schema

{
  "type": "object",
  "properties": {
    "workflow_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Workflow id, from cats_list_workflows or a pipeline's workflow_id."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "workflow_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_list_companies(page, per_page)

List client companies (name, address, website, owner), paged. GET /companies.

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_get_company(company_id)

One company by id. GET /companies/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "company_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "CATS company id."
    }
  },
  "required": [
    "company_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_search_companies(query, page, per_page)

Free-text search over companies, paged. GET /companies/search?query=.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Search text."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "query"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_list_contacts(page, per_page)

List client contacts (personal data: name, title, emails, company), paged. GET /contacts.

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_get_contact(contact_id)

One client contact by id (personal data). GET /contacts/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "contact_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "CATS contact id."
    }
  },
  "required": [
    "contact_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_search_contacts(query, page, per_page)

Free-text search over client contacts, paged. GET /contacts/search?query=.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Search text."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "query"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_list_tasks(page, per_page)

List tasks (description, priority 1-5, due date, assignee, completion, the record it is about), paged. GET /tasks.

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_get_task(task_id)

One task by id. GET /tasks/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "task_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "CATS task id."
    }
  },
  "required": [
    "task_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cats_list_activities(page, per_page)

The site-wide activity log (calls, emails logged, meetings, notes) with the record each is about, paged. GET /activities.

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴cats_add_candidate_activity(confirm, candidate_id, type, notes, regarding_job_id, ...)

WRITE: Requires confirm:true. log an activity (a call, meeting, note...) on a candidate's record. It only records the entry in CATS: no email/SMS-send request is made, even for type 'email' or 'text_message'. Creates a new entry each time (not idempotent). POST /candidates/{id}/activities.

Input Schema

{
  "type": "object",
  "properties": {
    "confirm": {
      "type": "boolean",
      "const": true,
      "description": "Confirm this change to the CATS account."
    },
    "candidate_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "CATS candidate id."
    },
    "type": {
      "type": "string",
      "enum": [
        "email",
        "meeting",
        "call_talked",
        "call_lvm",
        "call_missed",
        "text_message",
        "other"
      ],
      "description": "Activity type; use 'other' for a plain note."
    },
    "notes": {
      "type": "string",
      "minLength": 1,
      "maxLength": 10000,
      "description": "The note text."
    },
    "regarding_job_id": {
      "description": "The job order this activity is about; omit for a general activity.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "date": {
      "description": "When it happened (ISO 8601); default now.",
      "type": "string"
    }
  },
  "required": [
    "confirm",
    "candidate_id",
    "type",
    "notes"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴cats_create_task(confirm, description, about_type, about_id, assigned_to_id, ...)

WRITE: Requires confirm:true. create a task in CATS, optionally about a candidate, contact, company or job and assigned to a user. Creates a new task each time (not idempotent); CATS may notify the assignee. POST /tasks.

Input Schema

{
  "type": "object",
  "properties": {
    "confirm": {
      "type": "boolean",
      "const": true,
      "description": "Confirm this change to the CATS account."
    },
    "description": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2000,
      "description": "What has to be done."
    },
    "about_type": {
      "description": "Kind of record the task is about; omit for a general task. Needs about_id.",
      "type": "string",
      "enum": [
        "candidate",
        "contact",
        "company",
        "job"
      ]
    },
    "about_id": {
      "description": "Id of that record.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "assigned_to_id": {
      "description": "CATS user id of the assignee (see cats_list_users).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "priority": {
      "description": "1 (lowest) to 5.",
      "type": "integer",
      "minimum": 1,
      "maximum": 5
    },
    "date_due": {
      "description": "Due date (ISO 8601); omit for ASAP.",
      "type": "string"
    }
  },
  "required": [
    "confirm",
    "description"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴cats_change_pipeline_status(confirm, pipeline_id, status_id)

WRITE: Requires confirm:true. change the status of a pipeline (move a candidate to another stage of a job's workflow, e.g. Interviewing, Offered, Rejected). Get the pipeline id from cats_list_candidate_pipelines and the status id from cats_list_workflow_statuses. Requires confirm:true. Requests that status triggers (which can e-mail people or change records) be suppressed: every trigger attached to the target status is sent with fire=false. CATS remains responsible for enforcing its trigger semantics; independently configured webhooks may still run. The change is recorded in the pipeline's status history. POST /pipelines/{id}/status.

Input Schema

{
  "type": "object",
  "properties": {
    "confirm": {
      "type": "boolean",
      "const": true,
      "description": "Confirm this change to the CATS account."
    },
    "pipeline_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "CATS pipeline id."
    },
    "status_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The status to move to; must belong to the pipeline's workflow."
    }
  },
  "required": [
    "confirm",
    "pipeline_id",
    "status_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴cats_create_candidate(confirm, first_name, last_name, email, phone, ...)

WRITE: Requires confirm:true. create one candidate record (personal data) with name, optional contact details and notes. Refuses when CATS finds a duplicate (check_duplicate=true, the default). Creates a new record each time (not idempotent); no email-send request is made to the candidate and no login is created. POST /candidates.

Input Schema

{
  "type": "object",
  "properties": {
    "confirm": {
      "type": "boolean",
      "const": true,
      "description": "Confirm this change to the CATS account."
    },
    "first_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "last_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "email": {
      "description": "Primary e-mail address (stored only, never mailed).",
      "type": "string",
      "maxLength": 254,
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "phone": {
      "description": "Phone number with country code.",
      "type": "string",
      "minLength": 3,
      "maxLength": 40
    },
    "phone_type": {
      "description": "Phone type (default mobile).",
      "type": "string",
      "enum": [
        "mobile",
        "home",
        "work",
        "fax",
        "main",
        "other"
      ]
    },
    "title": {
      "description": "Current job title.",
      "type": "string",
      "maxLength": 200
    },
    "current_employer": {
      "type": "string",
      "maxLength": 200
    },
    "city": {
      "type": "string",
      "maxLength": 100
    },
    "state": {
      "type": "string",
      "maxLength": 100
    },
    "postal_code": {
      "type": "string",
      "maxLength": 30
    },
    "country_code": {
      "description": "ISO 3166 two-letter country code.",
      "type": "string",
      "minLength": 2,
      "maxLength": 2
    },
    "key_skills": {
      "type": "string",
      "maxLength": 2000
    },
    "source": {
      "description": "Where the candidate came from.",
      "type": "string",
      "maxLength": 200
    },
    "notes": {
      "type": "string",
      "maxLength": 10000
    },
    "owner_id": {
      "description": "CATS user id of the record owner.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "check_duplicate": {
      "description": "Refuse to create when a duplicate exists (default true).",
      "type": "boolean"
    }
  },
  "required": [
    "confirm",
    "first_name",
    "last_name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded34 tools