Check contact data with 100+ quality checks, find B2B contacts, fill work e-mail and mobile.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Your ListPlus agent key (listplus.ai/app/agents). Without it, the person search and the checks work for free; enriching needs the key.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
FREE (up to 25 records without a key, 1000 with one) — check contact records for errors with 100+ checks: typos in e-mail domains, role mailboxes (office@), duplicates and near-duplicates, phone codes that do not fit the country, LinkedIn status text in names, placeholders … Returns findings per record with proposed fixes. Nothing is stored or changed.
Records as JSON objects. Any key names (e.g. first_name, last_name, email, company_name, domain, linkedin_profile_url, job_title, phone, country, city — or Vorname, Firma, Mail …); the answer says how each key was read.
Also run the AI checks (fake names, a person's name as company, department instead of job title, city vs country) — PAID, needs a key; the price range is in `options`
Language of `tell_your_user` (default en)
Only these areas: name, email, company, linkedin, job_title, phone, address, gender, duplicates, completeness, cross_field, compliance, campaign
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http listplus https://listplus.ai/mcp
Headers
Authorization (optional, not in the config above): Your ListPlus agent key (listplus.ai/app/agents). Without it, the person search and the checks work for free; enriching needs the key.FREE (up to 25 records without a key, 1000 with one) — check contact records for errors with 100+ checks: typos in e-mail domains, role mailboxes (office@), duplicates and near-duplicates, phone codes that do not fit the country, LinkedIn status text in names, placeholders … Returns findings per record with proposed fixes. Nothing is stored or changed.
| Argument | Type | Description |
|---|---|---|
| ai | boolean | Also run the AI checks (fake names, a person's name as company, department instead of job title, city vs country) — PAID, needs a key; the price range is in `options` |
| records* | array | Records as JSON objects. Any key names (e.g. first_name, last_name, email, company_name, domain, linkedin_profile_url, job_title, phone, country, city — or Vorname, Firma, Mail …); the answer says how each key was read. |
| language | string | Language of `tell_your_user` (default en) |
| categories | array | Only these areas: name, email, company, linkedin, job_title, phone, address, gender, duplicates, completeness, cross_field, compliance, campaign |
{
"type": "object",
"required": [
"records"
],
"properties": {
"ai": {
"type": "boolean",
"description": "Also run the AI checks (fake names, a person's name as company, department instead of job title, city vs country) — PAID, needs a key; the price range is in `options`"
},
"records": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"minItems": 1,
"description": "Records as JSON objects. Any key names (e.g. first_name, last_name, email, company_name, domain, linkedin_profile_url, job_title, phone, country, city — or Vorname, Firma, Mail …); the answer says how each key was read."
},
"language": {
"enum": [
"en",
"de"
],
"type": "string",
"description": "Language of `tell_your_user` (default en)"
},
"categories": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only these areas: name, email, company, linkedin, job_title, phone, address, gender, duplicates, completeness, cross_field, compliance, campaign"
}
},
"additionalProperties": false
}PAID (needs a key) — per record from a name + company: work e-mail ≈2.39, at most 9 credits; mobile ≈3.84, at most 12; job title ≈1.41, at most 13.5. Charged per hit for e-mail and phone. Use estimate:true first for the exact price of YOUR records (free, no key). Fills fields of contact records (work e-mail, mobile, job title, LinkedIn profile, company, domain, industry, size, place). The records go into the key's agent list in ListPlus (the user can open it); waits up to 25 s, then answers with a job_id to poll (get_job).
| Argument | Type | Description |
|---|---|---|
| fields* | array | Fields to fill: email, phone, job_title, linkedin_profile_url, company_name, domain, industry, city, country |
| records* | array | Records as JSON objects. Any key names (e.g. first_name, last_name, email, company_name, domain, linkedin_profile_url, job_title, phone, country, city — or Vorname, Firma, Mail …); the answer says how each key was read. |
| estimate | boolean | true = only the price for these records, nothing runs (free, no key needed) |
| language | string | Language of `tell_your_user` (default en) |
| request_id | string | Your id for this call — a repeat with it gets the same job |
| max_credits | number | The most this call may cost (default: the key's day budget left) |
FREE (rate-limited) — find a person: name, job title, company, location, LinkedIn profile, how sure. Give first_name + last_name + company (or domain), a LinkedIn URL, a work e-mail, or a question in `query` ("CFO of Tink in Berlin"). No e-mail or phone in the answer — those are enrich_records.
| Argument | Type | Description |
|---|---|---|
| name | string | Full name, when there is no split |
| string | A WORK e-mail (not Gmail etc.) | |
| query | string | |
| domain | string | |
| company | string | |
| eu_only | boolean | Only services in the EU (skips one US web index) |
| language | string | Language of `tell_your_user` (default en) |
| last_name | string | |
| first_name | string | |
| linkedin_url | string |
FREE (key) — the state of an enrich_records job; when it ended, the records with the fields we found (in the order you sent them).
| Argument | Type | Description |
|---|---|---|
| job_id* | string | |
| language | string | Language of `tell_your_user` (default en) |
{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"maxLength": 60,
"minLength": 3
},
"language": {
"enum": [
"en",
"de"
],
"type": "string",
"description": "Language of `tell_your_user` (default en)"
}
},
"additionalProperties": false
}PAID (needs a key) — 0.3 credits per address (an address checked in the last 7 days costs nothing): is the e-mail address deliverable (valid, invalid, catch_all, unknown)? Up to 25 addresses per call, answered at once.
| Argument | Type | Description |
|---|---|---|
| emails* | array | |
| language | string | Language of `tell_your_user` (default en) |
{
"type": "object",
"required": [
"emails"
],
"properties": {
"emails": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"maxItems": 25,
"minItems": 1
},
"language": {
"enum": [
"en",
"de"
],
"type": "string",
"description": "Language of `tell_your_user` (default en)"
}
},
"additionalProperties": false
}FREE — what ListPlus can do for you: every action, the fields we can fill with their price per record, the free limits, and (with a key) your balance and day budget. Call this first if unsure.
| Argument | Type | Description |
|---|---|---|
| language | string | Language of `tell_your_user` (default en) |
{
"type": "object",
"properties": {
"language": {
"enum": [
"en",
"de"
],
"type": "string",
"description": "Language of `tell_your_user` (default en)"
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 7, 2026.
{
"type": "object",
"required": [
"records",
"fields"
],
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Fields to fill: email, phone, job_title, linkedin_profile_url, company_name, domain, industry, city, country"
},
"records": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"minItems": 1,
"description": "Records as JSON objects. Any key names (e.g. first_name, last_name, email, company_name, domain, linkedin_profile_url, job_title, phone, country, city — or Vorname, Firma, Mail …); the answer says how each key was read."
},
"estimate": {
"type": "boolean",
"description": "true = only the price for these records, nothing runs (free, no key needed)"
},
"language": {
"enum": [
"en",
"de"
],
"type": "string",
"description": "Language of `tell_your_user` (default en)"
},
"request_id": {
"type": "string",
"maxLength": 100,
"description": "Your id for this call — a repeat with it gets the same job"
},
"max_credits": {
"type": "number",
"description": "The most this call may cost (default: the key's day budget left)",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"description": "Full name, when there is no split"
},
"email": {
"type": "string",
"maxLength": 200,
"description": "A WORK e-mail (not Gmail etc.)"
},
"query": {
"type": "string",
"maxLength": 300
},
"domain": {
"type": "string",
"maxLength": 200
},
"company": {
"type": "string",
"maxLength": 200
},
"eu_only": {
"type": "boolean",
"description": "Only services in the EU (skips one US web index)"
},
"language": {
"enum": [
"en",
"de"
],
"type": "string",
"description": "Language of `tell_your_user` (default en)"
},
"last_name": {
"type": "string",
"maxLength": 100
},
"first_name": {
"type": "string",
"maxLength": 100
},
"linkedin_url": {
"type": "string",
"maxLength": 300
}
},
"additionalProperties": false
}