mcpField
M
mcp-job-change-tracker

mcp-job-change-tracker

Local
github.com/mambalabsdevBusiness & Marketing0Updated 1w ago

About mcp-job-change-tracker

An MCP server for checking CRM contacts against job-history data through the Mamba Labs Apify actor. It returns current roles, role history, change status, and source details for individual contacts or lists.

Key features

  1. 01Check one contact or a list
  2. 02Return current employer and title
  3. 03Include start month and role history
  4. 04Classify departures, hires, and promotions
  5. 05Report match and source freshness

Use cases

  1. 01Find CRM contacts who left a company
  2. 02Update records with current roles
  3. 03Review job changes across a contact list

MCP support

Exposes the `track_job_change` tool to MCP clients. It starts the Apify actor run and returns its dataset rows.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"com-mambabuilt-mcp-job-change-tracker": {
"command": "npx",
"args": [
"-y",
"@mambalabsdev/mcp-job-change-tracker"
],
"env": {
"APIFY_TOKEN": "<APIFY_TOKEN>"
}
}
}
}
Run commandnpx -y @mambalabsdev/mcp-job-change-tracker
Environment variables to set
APIFY_TOKENSecretApify API token from https://console.apify.com/account/integrations

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npm@mambalabsdev/mcp-job-change-tracker1.0.1

Tools

1

Saved tool list · updated 2w ago

ParameterTypeRequiredDescription
emailstringNoOptional. The person's work address at the last known company. With a BounceBan key, an undeliverable answer marks the person as left.
peoplearrayNoMany people at once. Each item takes the same keys as the single person fields: person_name, company_domain, company_name, last_known_title, profile_url, email, company_linkedin_url, location, input_id, and known_history (an object).
input_idstringNoOptional. Returned unchanged on the row so you can join it back to your CRM or table.
locationstringNoOptional. Echoed for your records.
checkNewsenumNoFree. Cites up to 3 headlines from the last year that name the person with a move word. Evidence only; a headline never sets the employer.true | false
maxPeoplestringNoStop after this many people. Default 1000.
serpApiKeystringNoOptional. Used for web search only when no Serper key is set. Your own key, sent as a run input; never stored by the actor.
person_namestringNoFull name of the person to check.
profile_urlstringNoOptional. The person's LinkedIn profile URL, used as the identity. This actor never opens it. Without it, the run looks the profile up with your search key and charges profile_resolved when it finds and accepts one.
cacheTtlDaysstringNoReuse a reading made in the last N days, uncharged, from a store in your own Apify account. 0 turns it off. Rows with your own history are never cached. Default 7.
company_namestringNoName of that company. Used with or instead of the domain to match roles in the person's history.
serperApiKeystringNoOptional. Web search (serper.dev): finds profile URLs and reads the search result line for the current role. About 1 to 3 searches per person. Your own key, sent as a run input; never stored by the actor.
known_historystringNoOptional. A role history you already have, as JSON: {"source": "heyreach", "source_date": "2026-10-07", "experiences": [...]} or {"source": "crm", "roles": [{"company_name", "title", "start_month", "end_month"}]}. Read before any paid key; a history newer than Max source age skips Prospeo.
prospeoApiKeystringNoOptional. Prospeo enrich-person: the person's role history with start and end months. Skipped when you send a fresh history of your own. Your own key, sent as a run input; never stored by the actor.
company_domainstringNoWebsite domain of the company your records place this person at, for example microsoft.com. Left, landed, and promoted are worked out against this company.
max_charge_usdstringNoOptional. The run stops before any row that would take its event charges past this amount.
verifyOldEmailenumNoWith a BounceBan key: one check per person who still reads as at the company. Uses the address you send, or one Prospeo returns on the company domain.true | false
bouncebanApiKeystringNoOptional. Verifies the old work address only while the person still reads as at the company. Only an undeliverable answer is used. Your own key, sent as a run input; never stored by the actor.
checkCompanySiteenumNoFree. Looks for the person on up to 4 team and about pages of the last known company domain.true | false
last_known_titlestringNoThe title your records hold. Echoed on the row as input_title.
maxSourceAgeDaysstringNoA history you send that is older than this is treated as lagging, so the run also reads Prospeo and the search result. Default 30.
includeRoleHistoryenumNoNo keeps role_count and drops the role_history array.true | false
company_linkedin_urlstringNoOptional. The strongest company match when a role history carries LinkedIn company URLs.

Details

From the project README

Job Change Tracker MCP Server

Smithery Glama score MCP Registry npm version npm downloads license mcpservers.org

Job Change Tracker MCP server

An MCP server for the Mamba Labs Job Change Tracker actor on Apify. Send the contacts in your CRM. Get one row back per person: where they work now, their title, when they started, their role history, and whether they left the company you know them at, landed somewhere new, or moved up inside the same company. Every row says how the person was matched, which source the answer came from, and how old that source is.

What's Inside

What it does

Check whether one contact, or a list of contacts, still works at the company your records hold. Returns one flat, Clay-ready JSON row per person: current employer, title, start month, role history, status (left, landed, promoted, or still there), how the person was matched, the source of the answer, and that source's date, with a namesake check. Runs on data you send (known_history) and on your own Serper or SerpApi, Prospeo, and BounceBan keys passed as inputs; this tool never fetches LinkedIn and holds no key of its own. Provide person_name with company_domain or company_name, or a people list. A run that does not succeed is returned as an error with its run ID. Read-only; requires an APIFY_TOKEN and consumes Apify credits per call.

All of the work runs on Apify. This package is a thin client that starts the actor run, waits for it, and hands back the dataset rows.

Quick start

You need Node.js 18 or newer and an Apify account with an API token.

Add this to your Claude Desktop config (claude_desktop_config.json), Cursor, or any MCP client:

{
  "mcpServers": {
    "mamba-job-change-tracker": {
      "command": "npx",
      "args": [
        "-y",
        "@mambalabsdev/mcp-job-change-tracker"
      ],
      "env": {
        "APIFY_TOKEN": "your-apify-token"
      }
    }
  }
}

Restart the client. The track_job_change tool appears.

Prerequisites

Example prompts

  • "Check whether Jane Doe still works at example.com and where she went if she left."
  • "Run these 20 contacts and tell me who changed jobs in the last 6 months."

Tool

track_job_change. One tool. Example arguments:

{
  "person_name": "Jane Doe",
  "company_domain": "example.com",
  "company_name": "Example Inc"
}

Inputs

Every buyer facing input of the live actor, unchanged. Omitted inputs take the actor's own defaults.

InputTypeRequiredDescription
person_namestringnoFull name of the person to check.
company_domainstringnoWebsite domain of the company your records place this person at, for example microsoft.com. Left, landed, and promoted are worked out against this company.
company_namestringnoName of that company. Used with or instead of the domain to match roles in the person's history.
last_known_titlestringnoThe title your records hold. Echoed on the row as input_title.
profile_urlstringnoOptional. The person's LinkedIn profile URL, used as the identity. This actor never opens it. Without it, the run looks the profile up with your search key and charges profile_resolved when it finds and accepts one.
emailstringnoOptional. The person's work address at the last known company. With a BounceBan key, an undeliverable answer marks the person as left.
company_linkedin_urlstringnoOptional. The strongest company match when a role history carries LinkedIn company URLs.
locationstringnoOptional. Echoed for your records.
input_idstringnoOptional. Returned unchanged on the row so you can join it back to your CRM or table.
known_historystringnoOptional. A role history you already have, as JSON: {"source": "heyreach", "source_date": "2026-10-07", "experiences": [...]} or {"source": "crm", "roles": [{"company_name", "title", "start_month", "end_month"}]}. Read before any paid key; a history newer than Max source age skips Prospeo.
peoplearraynoMany people at once. Each item takes the same keys as the single person fields: person_name, company_domain, company_name, last_known_title, profile_url, email, company_linkedin_url, location, input_id, and known_history (an object).
serperApiKeystringnoOptional. Web search (serper.dev): finds profile URLs and reads the search result line for the current role. About 1 to 3 searches per person. Your own key, sent as a run input; never stored by the actor.
serpApiKeystringnoOptional. Used for web search only when no Serper key is set. Your own key, sent as a run input; never stored by the actor.
prospeoApiKeystringnoOptional. Prospeo enrich-person: the person's role history with start and end months. Skipped when you send a fresh history of your own. Your own key, sent as a run input; never stored by the actor.
bouncebanApiKeystringnoOptional. Verifies the old work address only while the person still reads as at the company. Only an undeliverable answer is used. Your own key, sent as a run input; never stored by the actor.
maxSourceAgeDaysstringnoA history you send that is older than this is treated as lagging, so the run also reads Prospeo and the search result. Default 30.
checkCompanySitestringnoFree. Looks for the person on up to 4 team and about pages of the last known company domain.
checkNewsstringnoFree. Cites up to 3 headlines from the last year that name the person with a move word. Evidence only; a headline never sets the employer.
verifyOldEmailstringnoWith a BounceBan key: one check per person who still reads as at the company. Uses the address you send, or one Prospeo returns on the company domain.
includeRoleHistorystringnoNo keeps role_count and drops the role_history array.
cacheTtlDaysstringnoReuse a reading made in the last N days, uncharged, from a store in your own Apify account. 0 turns it off. Rows with your own history are never cached. Default 7.
maxPeoplestringnoStop after this many people. Default 1000.
max_charge_usdstringnoOptional. The run stops before any row that would take its event charges past this amount.

Pricing

Pay per event on Apify, billed to your Apify account. Prices in USD.

EventFree planBronzeSilverGold
person_read, per person read$0.025$0.02375$0.0225$0.02125
profile_resolved, per profile resolved by web search$0.006$0.0057$0.0054$0.0051
apify-actor-start, per run start$0.001$0.001$0.001$0.001

Your keys

The actor holds no provider key of its own. Every paid provider key is yours, passed as an input and stored by Apify as a secret input. Without a key, the actor skips that step and says so in the run.

Full actor documentation

apify.com/mambalabs/job-change-tracker

License

MIT. See LICENSE.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.