Skip to main content
Glama

linkedin_sn_search_users

Search LinkedIn users with Sales Navigator filters to find professionals by name, title, company, location, education, and other criteria for targeted outreach and recruitment.

Instructions

Advanced search for LinkedIn users using Sales Navigator filters

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
company_locationsNoCompany location URN (geo:*) or name, or array of them
company_sizesNoCompany size ranges
company_typesNoCompany types
countYesMaximum number of results (max 2500)
current_companiesNoCurrent company URN (company:*) or name, or array of them
current_titlesNoExact words to search in current titles
educationNoEducation URN (company:*) or name, or array of them
first_namesNoExact first names to search for
functionsNoJob functions
industryNoIndustry URN (industry:*) or name, or array of them
keywordsNoAny keyword for searching in the user profile. Using this may reduce result count.
languagesNoProfile languages
last_namesNoExact last names to search for
levelsNoJob seniority levels
locationNoLocation URN (geo:*) or name, or array of them
past_companiesNoPast company URN (company:*) or name, or array of them
past_titlesNoExact words to search in past titles
timeoutNoTimeout in seconds (20-1500)
years_in_the_current_companyNoYears in current company ranges
years_in_the_current_positionNoYears in current position ranges

Implementation Reference

  • The handler function for the 'linkedin_sales_navigator_search_users' tool (corresponding to linkedin_sn_search_users endpoint). It builds request data from input parameters and calls the AnySite API endpoint for advanced LinkedIn Sales Navigator user search.
    async ({ keywords, count, timeout, first_names, last_names, current_titles }) => {
      const requestData: any = { count, timeout };
      if (keywords) requestData.keywords = keywords;
      if (first_names) requestData.first_names = first_names;
      if (last_names) requestData.last_names = last_names;
      if (current_titles) requestData.current_titles = current_titles;
      log("Starting LinkedIn Sales Navigator users search with filters");
      try {
        const response = await makeRequest(API_CONFIG.ENDPOINTS.LINKEDIN_SN_SEARCH_USERS, requestData);
        log(`Search complete, found ${response.length} results`);
        return {
          content: [{ type: "text", text: JSON.stringify(response, null, 2) }]
        };
      } catch (error) {
        log("LinkedIn Sales Navigator search error:", error);
        return {
          content: [{ type: "text", text: `LinkedIn Sales Navigator search API error: ${formatError(error)}` }],
          isError: true
        };
      }
    }
  • Zod schema defining the input parameters for the linkedin_sales_navigator_search_users tool.
    {
      keywords: z.string().optional().describe("Search keywords"),
      count: z.number().default(10).describe("Max results"),
      timeout: z.number().default(300).describe("Timeout in seconds"),
      first_names: z.array(z.string()).optional().describe("First names"),
      last_names: z.array(z.string()).optional().describe("Last names"),
      current_titles: z.array(z.string()).optional().describe("Current job titles")
    },
  • src/index.ts:1061-1092 (registration)
    Registration of the 'linkedin_sales_navigator_search_users' tool using McpServer.tool() method, including name, description, input schema, and handler.
      "linkedin_sales_navigator_search_users",
      "Advanced LinkedIn Sales Navigator user search",
      {
        keywords: z.string().optional().describe("Search keywords"),
        count: z.number().default(10).describe("Max results"),
        timeout: z.number().default(300).describe("Timeout in seconds"),
        first_names: z.array(z.string()).optional().describe("First names"),
        last_names: z.array(z.string()).optional().describe("Last names"),
        current_titles: z.array(z.string()).optional().describe("Current job titles")
      },
      async ({ keywords, count, timeout, first_names, last_names, current_titles }) => {
        const requestData: any = { count, timeout };
        if (keywords) requestData.keywords = keywords;
        if (first_names) requestData.first_names = first_names;
        if (last_names) requestData.last_names = last_names;
        if (current_titles) requestData.current_titles = current_titles;
        log("Starting LinkedIn Sales Navigator users search with filters");
        try {
          const response = await makeRequest(API_CONFIG.ENDPOINTS.LINKEDIN_SN_SEARCH_USERS, requestData);
          log(`Search complete, found ${response.length} results`);
          return {
            content: [{ type: "text", text: JSON.stringify(response, null, 2) }]
          };
        } catch (error) {
          log("LinkedIn Sales Navigator search error:", error);
          return {
            content: [{ type: "text", text: `LinkedIn Sales Navigator search API error: ${formatError(error)}` }],
            isError: true
          };
        }
      }
    );
  • API endpoint constant used by the tool handler for the LinkedIn SN search users endpoint.
    LINKEDIN_SN_SEARCH_USERS: "/api/linkedin/sn_search/users",
  • Comprehensive TypeScript interface for LinkedinSalesNavigatorSearchUsersArgs in types.ts (not directly used in the tool registration).
    export interface LinkedinSalesNavigatorSearchUsersArgs {
      keywords?: string;
      first_names?: string[];
      last_names?: string[];
      current_titles?: string[];
      location?: string | string[];
      education?: string | string[];
      languages?: string[];
      past_titles?: string[];
      functions?: string[];
      levels?: string[];
      years_in_the_current_company?: string[];
      years_in_the_current_position?: string[];
      company_sizes?: string[];
      company_types?: string[];
      company_locations?: string | string[];
      current_companies?: string | string[];
      past_companies?: string | string[];
      industry?: string | string[];
      count: number;
      timeout?: number;
    }
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions 'advanced search' but doesn't describe what that means operationally - no information about rate limits, authentication requirements, result format, pagination, or performance characteristics. The description doesn't explain what 'Sales Navigator filters' means in practice or how results differ from regular LinkedIn searches.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that communicates the core functionality without unnecessary words. It's appropriately sized for a tool with comprehensive schema documentation and gets straight to the point about what makes this search 'advanced' (Sales Navigator filters).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex search tool with 20 parameters and no annotations or output schema, the description is inadequate. It doesn't explain what the tool returns, how results are structured, or any behavioral aspects. While the schema covers parameters well, the description fails to provide the contextual understanding needed for effective tool selection and use, especially given the absence of output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 20 parameters thoroughly. The description adds no parameter-specific information beyond what's in the schema. It mentions 'Sales Navigator filters' which hints at the parameter categories, but provides no additional syntax, format, or usage guidance beyond the comprehensive schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('search') and resource ('LinkedIn users') with the specific context of 'using Sales Navigator filters'. It distinguishes from generic LinkedIn user tools by specifying the advanced Sales Navigator filtering capability. However, it doesn't explicitly differentiate from 'search_linkedin_users' sibling tool, which appears to be a more general search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention the sibling 'search_linkedin_users' tool or explain when Sales Navigator filters are appropriate versus basic LinkedIn searches. There's no discussion of prerequisites, limitations, or typical use cases for this advanced search functionality.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/anysiteio/hdw-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server