Skip to main content
Glama
Ritesh-sudo

Job Search MCP Server

by Ritesh-sudo

search_specific_job_site

Search for AI/ML internships and entry-level positions on LinkedIn, Indeed, Glassdoor, ZipRecruiter, or Monster. Filter results by location and Python proficiency to find relevant job opportunities with application URLs.

Instructions

Search for jobs on a specific job site

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
siteYesJob site to search
locationNoJob locationRemote
maxResultsNoMaximum number of results to return

Implementation Reference

  • The handler function for the 'search_specific_job_site' tool. It parses arguments, builds a JobFilter for AI/ML entry-level jobs requiring Python, calls jobSearchService.searchSite, and returns the results as a JSON string in the MCP response format.
    private async searchSpecificJobSite(args: any) {
      const { site, location = 'Remote', maxResults = 25 } = args;
    
      const filter: JobFilter = {
        location,
        maxResults,
        includeInternships: true,
        includeFullTime: true,
        keywords: [],
        experienceLevel: 'entry',
        requiredSkills: ['python'],
        jobTypes: ['ai', 'ml', 'machine learning', 'artificial intelligence', 'data science']
      };
    
      const results = await this.jobSearchService.searchSite(site, filter);
      
      return {
        content: [
          {
            type: 'text',
            text: JSON.stringify(results, null, 2)
          }
        ]
      };
    }
  • Input schema defining parameters for the tool: site (required, enum of job sites), location, maxResults.
    inputSchema: {
      type: 'object',
      properties: {
        site: {
          type: 'string',
          enum: ['linkedin', 'indeed', 'glassdoor', 'ziprecruiter', 'monster'],
          description: 'Job site to search'
        },
        location: {
          type: 'string',
          description: 'Job location',
          default: 'Remote'
        },
        maxResults: {
          type: 'number',
          description: 'Maximum number of results to return',
          default: 25
        }
      },
      required: ['site']
    }
  • src/index.ts:107-110 (registration)
    Registration in the tool dispatch switch statement within the CallToolRequestSchema handler.
    case 'search_ai_ml_jobs':
      return await this.searchAIMLJobs(args);
    case 'search_specific_job_site':
      return await this.searchSpecificJobSite(args);
  • src/index.ts:73-97 (registration)
    Tool registration in the ListToolsRequestSchema response, including name, description, and input schema.
    {
      name: 'search_specific_job_site',
      description: 'Search for jobs on a specific job site',
      inputSchema: {
        type: 'object',
        properties: {
          site: {
            type: 'string',
            enum: ['linkedin', 'indeed', 'glassdoor', 'ziprecruiter', 'monster'],
            description: 'Job site to search'
          },
          location: {
            type: 'string',
            description: 'Job location',
            default: 'Remote'
          },
          maxResults: {
            type: 'number',
            description: 'Maximum number of results to return',
            default: 25
          }
        },
        required: ['site']
      }
    }
  • Core helper method called by the handler. Retrieves the site-specific scraper, calls its search method with the filter, applies post-search filtering, and returns structured results or error.
    async searchSite(site: string, filter: JobFilter): Promise<JobSearchResult> {
      const startTime = Date.now();
      const scraper = this.scrapers.get(site.toLowerCase());
      
      if (!scraper) {
        throw new Error(`Unsupported job site: ${site}`);
      }
    
      try {
        const jobs = await scraper.search(filter);
        const filteredJobs = this.filterJobs(jobs, filter);
        
        return {
          site,
          jobs: filteredJobs,
          totalFound: filteredJobs.length,
          searchTime: Date.now() - startTime
        };
      } catch (error) {
        return {
          site,
          jobs: [],
          totalFound: 0,
          searchTime: Date.now() - startTime,
          error: error instanceof Error ? error.message : 'Unknown error'
        };
      }
    }
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/Ritesh-sudo/MCPJobSearch'

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