People Data Labs MCP by usefulapi
Enrich and search people and companies, resolve identities, and enrich IP addresses.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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": {
"peopledatalabs": {
"url": "https://peopledatalabs.usefulapi.io/mcp"
}
}
}Remote endpoints
https://peopledatalabs.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (8)
🟢pdl_person_enrich(name, first_name, last_name, email, phone, ...)
Find the single best-matching person profile for a set of identifying attributes (name, email, phone, profile URL, company, etc.). Returns one record plus a likelihood score (1-10), or a 404 'no match' body. Use uniquely-identifying inputs for best results. API: GET /person/enrich.
Input Schema
{
"type": "object",
"properties": {
"name": {
"description": "Full name, e.g. 'Sean Thorne'.",
"type": "string"
},
"first_name": {
"description": "First / given name.",
"type": "string"
},
"last_name": {
"description": "Last / family name.",
"type": "string"
},
"email": {
"description": "Email address, or an array of email addresses.",
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"phone": {
"description": "Phone number (E.164 or local).",
"type": "string"
},
"profile": {
"description": "Social profile URL(s), e.g. a LinkedIn URL. String or array.",
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"lid": {
"description": "LinkedIn numerical ID.",
"type": "string"
},
"pdl_id": {
"description": "PDL persistent ID for a person record.",
"type": "string"
},
"company": {
"description": "Company name, website, or PDL company id the person works at.",
"type": "string"
},
"school": {
"description": "School name or website the person attended.",
"type": "string"
},
"location": {
"description": "Free-text location, e.g. 'San Francisco, CA, USA'.",
"type": "string"
},
"region": {
"description": "State / region, e.g. 'california'.",
"type": "string"
},
"locality": {
"description": "City / locality, e.g. 'san francisco'.",
"type": "string"
},
"postal_code": {
"description": "Postal / ZIP code (assumed US if no country).",
"type": "string"
},
"country": {
"description": "Country name, e.g. 'united states'.",
"type": "string"
},
"birth_date": {
"description": "Birth date (yyyy or yyyy-mm-dd).",
"type": "string"
},
"min_likelihood": {
"description": "Only return a 200 if match confidence >= this (1-10).",
"type": "integer",
"minimum": 1,
"maximum": 10
},
"required": {
"description": "Only return a match that contains these fields, e.g. 'emails AND mobile_phone'.",
"type": "string"
},
"titlecase": {
"description": "Titlecase the returned data (default false = lowercase).",
"type": "boolean"
},
"pretty": {
"description": "Pretty-print the JSON response.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢pdl_person_identify(name, first_name, last_name, email, phone, ...)
Given broad, possibly-ambiguous attributes about a person, return up to 20 strongly-related profiles ranked by match score. Sits between enrich (1:1) and search (open-ended) — ideal when you can't uniquely resolve someone. API: GET /person/identify.
Input Schema
{
"type": "object",
"properties": {
"name": {
"description": "Full name, e.g. 'Sean Thorne'.",
"type": "string"
},
"first_name": {
"description": "First / given name.",
"type": "string"
},
"last_name": {
"description": "Last / family name.",
"type": "string"
},
"email": {
"description": "Email address, or an array of email addresses.",
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"phone": {
"description": "Phone number (E.164 or local).",
"type": "string"
},
"profile": {
"description": "Social profile URL(s), e.g. a LinkedIn URL. String or array.",
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"lid": {
"description": "LinkedIn numerical ID.",
"type": "string"
},
"pdl_id": {
"description": "PDL persistent ID for a person record.",
"type": "string"
},
"company": {
"description": "Company name, website, or PDL company id the person works at.",
"type": "string"
},
"school": {
"description": "School name or website the person attended.",
"type": "string"
},
"location": {
"description": "Free-text location, e.g. 'San Francisco, CA, USA'.",
"type": "string"
},
"region": {
"description": "State / region, e.g. 'california'.",
"type": "string"
},
"locality": {
"description": "City / locality, e.g. 'san francisco'.",
"type": "string"
},
"postal_code": {
"description": "Postal / ZIP code (assumed US if no country).",
"type": "string"
},
"country": {
"description": "Country name, e.g. 'united states'.",
"type": "string"
},
"birth_date": {
"description": "Birth date (yyyy or yyyy-mm-dd).",
"type": "string"
},
"titlecase": {
"description": "Titlecase the returned data (default false = lowercase).",
"type": "boolean"
},
"pretty": {
"description": "Pretty-print the JSON response.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢pdl_person_search(query, sql, size, from, scroll_token, ...)
Search the full PDL Person Dataset with an Elasticsearch query object OR a SQL string over the Person Schema (e.g. everyone with job_title_role='engineering' at a company). Returns matching profiles sorted by completeness; paginate with scroll_token. Each returned record costs 1 credit. API: POST /person/search.
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "Elasticsearch query as a JSON string, e.g. {\"query\":{\"term\":{\"job_company_name\":\"people data labs\"}}} — pass the value of \"query\".",
"type": "string"
},
"sql": {
"description": "SQL query string, e.g. SELECT * FROM person WHERE job_company_name='people data labs'.",
"type": "string"
},
"size": {
"description": "Number of records to return (1-100). Default 1.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"from": {
"description": "Legacy offset (0-9999). Prefer scroll_token.",
"type": "integer",
"minimum": 0,
"maximum": 9999
},
"scroll_token": {
"description": "Pagination token from a previous response.",
"type": "string"
},
"dataset": {
"description": "Dataset(s) to search: resume, email, phone, mobile_phone, street_address, consumer_social, developer, all. Comma-separate; prefix '-' to exclude.",
"type": "string"
},
"titlecase": {
"description": "Titlecase the returned data.",
"type": "boolean"
},
"pretty": {
"description": "Pretty-print the JSON response.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢pdl_company_enrich(name, website, ticker, profile, pdl_id, ...)
Find the single best-matching company record. Requires a non-ambiguous input — name OR website OR ticker OR profile (website/ticker/profile resolve more reliably than name). Returns firmographics (industry, size, location, etc.) or a 404 'no match' body. API: GET /company/enrich.
Input Schema
{
"type": "object",
"properties": {
"name": {
"description": "Company name, e.g. 'People Data Labs'.",
"type": "string"
},
"website": {
"description": "Company website, e.g. 'google.com' (most reliable).",
"type": "string"
},
"ticker": {
"description": "Stock ticker for a public company, e.g. 'AAPL'.",
"type": "string"
},
"profile": {
"description": "Company social profile URL, e.g. a LinkedIn company URL.",
"type": "string"
},
"pdl_id": {
"description": "PDL id for a company record.",
"type": "string"
},
"location": {
"description": "Company location free-text.",
"type": "string"
},
"locality": {
"description": "Company city / locality.",
"type": "string"
},
"region": {
"description": "Company state / region.",
"type": "string"
},
"country": {
"description": "Company country.",
"type": "string"
},
"titlecase": {
"description": "Titlecase the returned data.",
"type": "boolean"
},
"pretty": {
"description": "Pretty-print the JSON response.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢pdl_company_search(query, sql, size, from, scroll_token, ...)
Search the full PDL Company Dataset with an Elasticsearch query object OR a SQL string over the Company Schema (e.g. all SaaS companies with 50-200 employees in the US). Paginate with scroll_token. Each returned record costs 1 credit. API: POST /company/search.
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "Elasticsearch query as a JSON string, e.g. {\"query\":{\"term\":{\"industry\":\"computer software\"}}} — pass the value of \"query\".",
"type": "string"
},
"sql": {
"description": "SQL query string, e.g. SELECT * FROM company WHERE industry='computer software'.",
"type": "string"
},
"size": {
"description": "Number of records to return (1-100). Default 1.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"from": {
"description": "Legacy offset (0-9999). Prefer scroll_token.",
"type": "integer",
"minimum": 0,
"maximum": 9999
},
"scroll_token": {
"description": "Pagination token from a previous response.",
"type": "string"
},
"titlecase": {
"description": "Titlecase the returned data.",
"type": "boolean"
},
"pretty": {
"description": "Pretty-print the JSON response.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢pdl_ip_enrich(ip, return_person, min_confidence, titlecase, pretty)
Enrich an IP address with its location, company, and (optionally) associated person data via a 1:1 match against PDL's IP dataset. API: GET /ip/enrich.
Input Schema
{
"type": "object",
"properties": {
"ip": {
"type": "string",
"description": "The IP address to enrich, e.g. '72.212.42.169'."
},
"return_person": {
"description": "Include associated person data if available.",
"type": "boolean"
},
"min_confidence": {
"description": "Minimum confidence level required to return a match.",
"type": "string",
"enum": [
"very high",
"high",
"moderate",
"low",
"very low"
]
},
"titlecase": {
"description": "Titlecase the returned data.",
"type": "boolean"
},
"pretty": {
"description": "Pretty-print the JSON response.",
"type": "boolean"
}
},
"required": [
"ip"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢pdl_autocomplete(field, text, size, titlecase, pretty)
Get suggested values for a search field along with the number of available records for each — useful for building valid Person/Company Search queries. Free on all plans. API: GET /autocomplete.
Input Schema
{
"type": "object",
"properties": {
"field": {
"type": "string",
"description": "Field to autocomplete: e.g. company, school, location, region, country, industry, title, role, sub_role, skill, major."
},
"text": {
"description": "Partial text to get suggestions for, e.g. 'stanf'.",
"type": "string"
},
"size": {
"description": "Max suggestions to return. Default 10.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"titlecase": {
"description": "Titlecase the returned data.",
"type": "boolean"
},
"pretty": {
"description": "Pretty-print the JSON response.",
"type": "boolean"
}
},
"required": [
"field"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢pdl_job_posting_search(query, sql, size, scroll_token, pretty)
Search PDL's Job Posting Dataset (millions of active & historical postings sourced from company career pages) with an Elasticsearch query object OR a SQL string. Beta — may require plan access (HTTP 403 if not enabled). Each returned posting costs 1 credit. API: POST /job_posting/search.
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "Elasticsearch query as a JSON string, e.g. {\"query\":{\"term\":{\"title_role\":\"engineering\"}}} — pass the value of \"query\".",
"type": "string"
},
"sql": {
"description": "SQL query string over the job posting dataset.",
"type": "string"
},
"size": {
"description": "Number of records to return (1-100). Default 1.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"scroll_token": {
"description": "Pagination token from a previous response.",
"type": "string"
},
"pretty": {
"description": "Pretty-print the JSON response.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence