ReachKee MCP

B2B people search, AI lead scoring and work-email lookup. 15 tools.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
95%
Naming quality
92%
Poisoning risk
80%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains suspicious base64-like encoded stringin get_task_results
  • LOWTool 'card_status' description lacks action verbin card_status

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,762Tokens (tool definitions)
~1.3 KBTypical response size
Significant attention impact (2.16% 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": {
    "mcp": {
      "url": "https://api.reachkee.com/mcp"
    }
  }
}

Remote endpoints

https://api.reachkee.com/mcpstreamable-http

What it can do

Tool inventory

Tools (15)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_leads(card_no, keywords, query, page)

Instant B2B people (leads) search, returns one page of 25 rows synchronously. Give free-text keywords OR a full Sales-style query string. Billing: 1 credit per successful page with results; the same query+page repeated within 24h is served from cache for free.

Input Schema

{
  "type": "object",
  "properties": {
    "card_no": {
      "type": "string",
      "description": "Card number (optional if provided via Authorization: Bearer header)"
    },
    "keywords": {
      "type": "string",
      "description": "Free-text keywords, e.g. \"medical device ceo australia\""
    },
    "query": {
      "type": "string",
      "description": "Full Sales-style filter string (overrides keywords), e.g. (filters:List((type:CURRENT_COMPANY,values:List((id:123,text:Acme,selectionType:INCLUDED)))),keywords:ceo,spellCorrectionEnabled:true)"
    },
    "page": {
      "type": "integer",
      "description": "1-based page number (default 1), 25 rows per page"
    }
  }
}
🟢search_companies(card_no, keywords, query, page)

Instant B2B company (accounts) search, returns one page of 25 rows synchronously. Give free-text keywords OR a full Sales-style query string. Billing: 1 credit per successful page with results; the same query+page repeated within 24h is served from cache for free.

Input Schema

{
  "type": "object",
  "properties": {
    "card_no": {
      "type": "string",
      "description": "Card number (optional if provided via Authorization: Bearer header)"
    },
    "keywords": {
      "type": "string",
      "description": "Free-text keywords, e.g. \"solar energy manufacturer germany\""
    },
    "query": {
      "type": "string",
      "description": "Full Sales-style filter string (overrides keywords), e.g. (filters:List((type:INDUSTRY,values:List((id:112,text:Renewables,selectionType:INCLUDED)))),spellCorrectionEnabled:true)"
    },
    "page": {
      "type": "integer",
      "description": "1-based page number (default 1), 25 rows per page"
    }
  }
}
🟢card_status(card_no)

Free. Returns status, remaining credits and usage limits of the authenticated card.

Input Schema

{
  "type": "object",
  "properties": {
    "card_no": {
      "type": "string",
      "description": "Card number (optional if provided via Authorization header)"
    }
  }
}
🟢query_email(card_no, profile_url, profile_urn, first_name, last_name, ...)

Look up email addresses (plus phones and social links) for one person. Provide profile_url OR profile_urn (the profile_urn field returned by search_leads rows). Optional first_name/last_name/company improve matching. Billing: charged email_cost credits only when an email or phone is actually found; no result = no charge. Slow: can take 30-120 seconds.

Input Schema

{
  "type": "object",
  "properties": {
    "card_no": {
      "type": "string",
      "description": "Card number (optional if provided via Authorization: Bearer header)"
    },
    "profile_url": {
      "type": "string",
      "description": "Public profile page URL of the person"
    },
    "profile_urn": {
      "type": "string",
      "description": "profile_urn value from a search_leads row, e.g. urn:li:fs_salesProfile:(ACwAA...,NAME_SEARCH,abcd)"
    },
    "first_name": {
      "type": "string",
      "description": "Optional first name (improves matching)"
    },
    "last_name": {
      "type": "string",
      "description": "Optional last name (improves matching)"
    },
    "company": {
      "type": "string",
      "description": "Optional company name (improves matching)"
    }
  }
}
🟢enrich_profile(card_no, profile_urn)

Fetch the complete public profile of one person found by search_leads: headline, about summary, positions (experience), educations, skills, languages, public contact info (emails/phones/websites), connection count and the real public profile URL. Input is the profile_urn field from a search_leads row. Billing: 1 credit per successful fetch; repeating the same person within 24h is free (cached). Takes 5-30 seconds.

Input Schema

{
  "type": "object",
  "properties": {
    "card_no": {
      "type": "string",
      "description": "Card number (optional if provided via Authorization: Bearer header)"
    },
    "profile_urn": {
      "type": "string",
      "description": "profile_urn value from a search_leads row, e.g. urn:li:fs_salesProfile:(ACwAA...,NAME_SEARCH,abcd)"
    }
  },
  "required": [
    "profile_urn"
  ]
}
🟢parse_icp(card_no, description, entity_type)

Free. Turn a natural-language description (any language) of your ideal customer or candidate into structured suggestions: entity_type (people/company), scoring dimensions, and search filter suggestions (industry, geography, titles, company size, ...). Use the output to compose keywords/query for search_leads, search_companies or create_search_task.

Input Schema

{
  "type": "object",
  "properties": {
    "card_no": {
      "type": "string",
      "description": "Card number (optional if provided via Authorization: Bearer header)"
    },
    "description": {
      "type": "string",
      "description": "One-paragraph description of the ideal customer/candidate, e.g. \"medical device purchasing managers in Australia\" or \"Shanghai-based senior semiconductor recruiters\""
    },
    "entity_type": {
      "type": "string",
      "enum": [
        "people",
        "company"
      ],
      "description": "Optional: people = find persons, company = find companies (auto-detected when omitted)"
    }
  },
  "required": [
    "description"
  ]
}
🟡create_search_task(card_no, task_type, query, title, page_from, ...)

Create a background B2B search task (people or company). Pages are fetched slowly in the background under strict rate limits. Credits are frozen upfront and settled by actual rows fetched. Returns the task plus queue position and ETA (hours).

Input Schema

{
  "type": "object",
  "properties": {
    "card_no": {
      "type": "string",
      "description": "Card number (optional if provided via Authorization: Bearer header)"
    },
    "task_type": {
      "type": "string",
      "enum": [
        "people",
        "company"
      ],
      "description": "Search type"
    },
    "query": {
      "type": "string",
      "description": "Sales-style filter string, e.g. (filters:List((type:CURRENT_COMPANY,values:List((id:123,text:Acme,selectionType:INCLUDED)))))"
    },
    "title": {
      "type": "string",
      "description": "Optional task title"
    },
    "page_from": {
      "type": "integer",
      "description": "First page (default 1)"
    },
    "page_to": {
      "type": "integer",
      "description": "Last page (default = page_from)"
    },
    "page_size": {
      "type": "integer",
      "description": "Rows per page, max 100 (default 25)"
    }
  },
  "required": [
    "task_type",
    "query"
  ]
}
🟢list_tasks(card_no)

List all tasks for this card with status, progress and usage snapshot.

Input Schema

{
  "type": "object",
  "properties": {
    "card_no": {
      "type": "string",
      "description": "Card number (optional if provided via Authorization header)"
    }
  }
}
🟢get_task(card_no, task_id)

Get one task: status, progress, billing (frozen/charged), queue position and ETA. Does not return result rows (use get_task_results).

Input Schema

{
  "type": "object",
  "properties": {
    "card_no": {
      "type": "string",
      "description": "Card number (optional if provided via Authorization header)"
    },
    "task_id": {
      "type": "string",
      "description": "Task id, e.g. t_8a67cd3548bc"
    }
  },
  "required": [
    "task_id"
  ]
}
🟢get_task_results(card_no, task_id, offset, limit)

Get kept result rows of a task (paginated). Rows are simplified: name/title/company/location/email/link/page.

Input Schema

{
  "type": "object",
  "properties": {
    "card_no": {
      "type": "string",
      "description": "Card number (optional if provided via Authorization header)"
    },
    "task_id": {
      "type": "string",
      "description": "Task id"
    },
    "offset": {
      "type": "integer",
      "description": "Row offset (default 0)"
    },
    "limit": {
      "type": "integer",
      "description": "Max rows to return, up to 200 (default 50)"
    }
  },
  "required": [
    "task_id"
  ]
}
🟢resolve_filter(card_no, filter_type, text)

Free. Turn a human filter value (region "Shanghai", industry "Medical Device", title "CEO", company "Siemens", ...) into search filter options with IDs, plus a ready-to-paste filter_snippet for the query parameter of search_leads / search_companies / create_search_task. Combine snippets like: (filters:List(SNIPPET,SNIPPET),keywords:...,spellCorrectionEnabled:true).

Input Schema

{
  "type": "object",
  "properties": {
    "card_no": {
      "type": "string",
      "description": "Card number (optional if provided via Authorization: Bearer header)"
    },
    "filter_type": {
      "type": "string",
      "enum": [
        "REGION",
        "INDUSTRY",
        "CURRENT_COMPANY",
        "PAST_COMPANY",
        "TITLE",
        "COMPANY_SIZE",
        "SENIORITY",
        "FUNCTION",
        "SCHOOL"
      ],
      "description": "Which filter to resolve"
    },
    "text": {
      "type": "string",
      "description": "The value to resolve, e.g. \"Shanghai\" / \"Medical Device\" / \"CEO\". Optional for enum-like types (INDUSTRY, COMPANY_SIZE, SENIORITY, FUNCTION): omit to list all options."
    }
  },
  "required": [
    "filter_type"
  ]
}
🟢enrich_company(card_no, company_id, company_urn, link)

Fetch full details of one company found by search_companies: description, website, industry, headquarters, employee count and growth, revenue range, specialties, type, year founded. Input: company_id / company_urn / link from a search_companies row. Billing: free, same as company details in the web app (results cached for 24h).

Input Schema

{
  "type": "object",
  "properties": {
    "card_no": {
      "type": "string",
      "description": "Card number (optional if provided via Authorization: Bearer header)"
    },
    "company_id": {
      "type": "string",
      "description": "Numeric company id, e.g. \"2382910\""
    },
    "company_urn": {
      "type": "string",
      "description": "company_urn value from a search_companies row"
    },
    "link": {
      "type": "string",
      "description": "Company link containing /company/<id>"
    }
  }
}
🟢bulk_query_email(card_no, profile_urns, profile_urls)

Start a background email lookup batch for up to 50 people. Provide profile_urns (from search_leads rows) and/or profile_urls. Deliberately slow (3-8s between people; up to 1-2 min per person worst case). Billing: email_cost credits charged ONLY per person whose email or phone is actually found. Returns job_id - poll get_bulk_email_results. One active batch per card.

Input Schema

{
  "type": "object",
  "properties": {
    "card_no": {
      "type": "string",
      "description": "Card number (optional if provided via Authorization: Bearer header)"
    },
    "profile_urns": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "profile_urn values from search_leads rows"
    },
    "profile_urls": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Public profile page URLs"
    }
  }
}
🟢get_bulk_email_results(card_no, job_id)

Free. Get status and per-person results of a bulk_query_email job. Jobs expire 24h after creation and the in-memory queue is lost on server restart (credits are only charged per found email, so nothing is lost financially).

Input Schema

{
  "type": "object",
  "properties": {
    "card_no": {
      "type": "string",
      "description": "Card number (optional if provided via Authorization header)"
    },
    "job_id": {
      "type": "string",
      "description": "Job id returned by bulk_query_email, e.g. be_1a2b3c4d5e6f"
    }
  },
  "required": [
    "job_id"
  ]
}
🟢score_rows(card_no, icp_description, dimensions, entity_type, locale, ...)

Score up to 25 rows against your ideal-customer profile with AI. Billing: 1 credit per call (up to 25 rows, same as AI scoring in the web app), charged only when at least one row is scored. Provide icp_description (any language) - or reuse the dimensions array returned by a previous call to skip re-parsing - plus rows like {name,title,company,location,summary}. Returns 0-100 score, verdict, confidence and a one-line reason per row. Takes a few seconds per row.

Input Schema

{
  "type": "object",
  "properties": {
    "card_no": {
      "type": "string",
      "description": "Card number (optional if provided via Authorization: Bearer header)"
    },
    "icp_description": {
      "type": "string",
      "description": "One-paragraph ideal-customer/candidate description"
    },
    "dimensions": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "Optional: dimensions from a previous score_rows/parse_icp result (skips re-parsing)"
    },
    "entity_type": {
      "type": "string",
      "enum": [
        "people",
        "company"
      ],
      "description": "Optional, default people"
    },
    "locale": {
      "type": "string",
      "enum": [
        "zh",
        "en"
      ],
      "description": "Language of reasons (default zh)"
    },
    "rows": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "1-25 rows: {name,title,company,location,summary}"
    }
  },
  "required": [
    "rows"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded15 tools