{
  "schemaVersion": "1.0",
  "item": {
    "slug": "job-search-mcp",
    "name": "Job Search",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/Amoghpurohit/job-search-mcp",
    "canonicalUrl": "https://clawhub.ai/Amoghpurohit/job-search-mcp",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/job-search-mcp",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=job-search-mcp",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "example_calls.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/job-search-mcp"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/job-search-mcp",
    "agentPageUrl": "https://openagent3.xyz/skills/job-search-mcp/agent",
    "manifestUrl": "https://openagent3.xyz/skills/job-search-mcp/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/job-search-mcp/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Job Search MCP Skill",
        "body": "This skill enables AI agents to search for jobs across multiple job boards using the JobSpy MCP Server. JobSpy aggregates job listings from LinkedIn, Indeed, Glassdoor, ZipRecruiter, Google Jobs, Bayt, Naukri, and BDJobs into a unified interface."
      },
      {
        "title": "When to Use This Skill",
        "body": "Use this skill when the user asks you to:\n\nFind job listings matching specific criteria (role, location, company, etc.)\nSearch for remote or on-site positions\nCompare job opportunities across different platforms\nGet salary information for job postings\nFind recently posted jobs (within X hours)\nSearch for jobs with \"Easy Apply\" options"
      },
      {
        "title": "Prerequisites",
        "body": "Python 3.10+\nNode.js 16+ (for some server implementations)\nThe JobSpy MCP server installed and configured"
      },
      {
        "title": "Option 1: Python MCP Server (Recommended)",
        "body": "# Install with pip\npip install mcp>=1.1.0 python-jobspy>=1.1.82 pandas>=2.1.0 pydantic>=2.0.0\n\n# Or install with uv (faster)\nuv add mcp python-jobspy pandas pydantic"
      },
      {
        "title": "Option 2: Clone a Pre-built Server",
        "body": "# Clone the jobspy-mcp-server repository\ngit clone https://github.com/chinpeerapat/jobspy-mcp-server.git\ncd jobspy-mcp-server\n\n# Install dependencies\nuv sync\n# or\npip install -e ."
      },
      {
        "title": "Claude Desktop Configuration",
        "body": "Add the following to your Claude Desktop config file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):\n\n{\n  \"mcpServers\": {\n    \"jobspy\": {\n      \"command\": \"uv\",\n      \"args\": [\"run\", \"jobspy-mcp-server\"],\n      \"env\": {}\n    }\n  }\n}\n\nAlternative configuration (Node.js server):\n\n{\n  \"mcpServers\": {\n    \"jobspy\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/jobspy-mcp-server/src/index.js\"],\n      \"env\": {\n        \"ENABLE_SSE\": \"0\"\n      }\n    }\n  }\n}"
      },
      {
        "title": "1. scrape_jobs_tool (Primary Tool)",
        "body": "Search for jobs across multiple job boards with comprehensive filtering.\n\nParameters:\n\nParameterTypeRequiredDefaultDescriptionsearch_termstring✅ Yes-Job keywords (e.g., \"software engineer\", \"data scientist\")locationstringNo-Job location (e.g., \"San Francisco, CA\", \"Remote\")site_namearrayNo[\"indeed\", \"linkedin\", \"zip_recruiter\", \"google\"]Job boards to searchresults_wantedintegerNo15Number of results (1-1000)job_typestringNo-Employment type: fulltime, parttime, internship, contractis_remotebooleanNofalseFilter for remote jobs onlyhours_oldintegerNo-Filter by posting recency in hoursdistanceintegerNo50Search radius in miles (1-100)easy_applybooleanNofalseFilter jobs with easy apply optioncountry_indeedstringNo\"usa\"Country for Indeed/Glassdoor searcheslinkedin_fetch_descriptionbooleanNofalseFetch full LinkedIn descriptions (slower)offsetintegerNo0Pagination offsetverboseintegerNo1Logging level (0=errors, 1=warnings, 2=all)\n\nSupported Values for site_name:\n\nlinkedin - Professional networking platform (rate limited)\nindeed - Largest job search engine (most reliable)\nglassdoor - Jobs with company reviews and salaries\nzip_recruiter - Job matching for US/Canada\ngoogle - Aggregated job listings\nbayt - Middle East job portal\nnaukri - India's leading job portal\nbdjobs - Bangladesh job portal\n\nSupported Values for job_type:\n\nfulltime\nparttime\ninternship\ncontract"
      },
      {
        "title": "2. get_supported_countries",
        "body": "Returns the complete list of supported countries for job searches. No parameters required."
      },
      {
        "title": "3. get_supported_sites",
        "body": "Returns detailed information about all supported job board sites. No parameters required."
      },
      {
        "title": "4. get_job_search_tips",
        "body": "Returns tips and best practices for effective job searching. No parameters required."
      },
      {
        "title": "Job Post Response Schema",
        "body": "When jobs are returned, each job post contains the following fields:\n\ninterface JobPost {\n  // Core fields (all platforms)\n  title: string;                    // Job title\n  company: string;                  // Company name\n  company_url?: string;             // Company website URL\n  job_url: string;                  // Direct link to job posting\n  location: {\n    country?: string;\n    city?: string;\n    state?: string;\n  };\n  is_remote: boolean;               // Whether job is remote\n  description?: string;             // Job description (markdown format)\n  job_type?: \"fulltime\" | \"parttime\" | \"internship\" | \"contract\";\n  \n  // Salary information\n  salary?: {\n    interval?: \"yearly\" | \"monthly\" | \"weekly\" | \"daily\" | \"hourly\";\n    min_amount?: number;\n    max_amount?: number;\n    currency?: string;\n    salary_source?: \"direct_data\" | \"description\";  // Parsed from posting\n  };\n  \n  date_posted?: string;             // ISO date string\n  emails?: string[];                // Contact emails if available\n  \n  // LinkedIn specific\n  job_level?: string;               // Seniority level\n  \n  // LinkedIn & Indeed specific\n  company_industry?: string;\n  \n  // Indeed specific\n  company_country?: string;\n  company_addresses?: string[];\n  company_employees_label?: string;\n  company_revenue_label?: string;\n  company_description?: string;\n  company_logo?: string;\n  \n  // Naukri specific\n  skills?: string[];\n  experience_range?: string;\n  company_rating?: number;\n  company_reviews_count?: number;\n  vacancy_count?: number;\n  work_from_home_type?: string;\n}"
      },
      {
        "title": "Example 1: Basic Job Search",
        "body": "User Prompt:\n\n\"Find me 10 software engineer jobs in San Francisco\"\n\nMCP Tool Call:\n\n{\n  \"tool\": \"scrape_jobs_tool\",\n  \"params\": {\n    \"search_term\": \"software engineer\",\n    \"location\": \"San Francisco, CA\",\n    \"results_wanted\": 10,\n    \"site_name\": [\"indeed\", \"linkedin\"]\n  }\n}\n\nExpected Output:\n\n{\n  \"jobs\": [\n    {\n      \"title\": \"Software Engineer\",\n      \"company\": \"TechCorp Inc.\",\n      \"location\": { \"city\": \"San Francisco\", \"state\": \"CA\" },\n      \"job_url\": \"https://indeed.com/viewjob?jk=abc123\",\n      \"salary\": { \"min_amount\": 120000, \"max_amount\": 180000, \"interval\": \"yearly\" },\n      \"job_type\": \"fulltime\",\n      \"is_remote\": false\n    }\n    // ... more jobs\n  ],\n  \"total_found\": 10\n}"
      },
      {
        "title": "Example 2: Remote Jobs Search",
        "body": "User Prompt:\n\n\"Search for remote Python developer positions from Indeed and ZipRecruiter\"\n\nMCP Tool Call:\n\n{\n  \"tool\": \"scrape_jobs_tool\",\n  \"params\": {\n    \"search_term\": \"Python developer\",\n    \"location\": \"Remote\",\n    \"is_remote\": true,\n    \"site_name\": [\"indeed\", \"zip_recruiter\"],\n    \"results_wanted\": 20\n  }\n}"
      },
      {
        "title": "Example 3: Recent Jobs with Filters",
        "body": "User Prompt:\n\n\"Find data scientist jobs in Boston posted in the last 24 hours\"\n\nMCP Tool Call:\n\n{\n  \"tool\": \"scrape_jobs_tool\",\n  \"params\": {\n    \"search_term\": \"data scientist\",\n    \"location\": \"Boston, MA\",\n    \"hours_old\": 24,\n    \"site_name\": [\"linkedin\", \"glassdoor\", \"indeed\"],\n    \"linkedin_fetch_description\": true\n  }\n}"
      },
      {
        "title": "Example 4: Entry-Level with Easy Apply",
        "body": "User Prompt:\n\n\"Look for entry-level marketing jobs in New York with easy apply options\"\n\nMCP Tool Call:\n\n{\n  \"tool\": \"scrape_jobs_tool\",\n  \"params\": {\n    \"search_term\": \"junior marketing\",\n    \"location\": \"New York, NY\",\n    \"job_type\": \"fulltime\",\n    \"easy_apply\": true,\n    \"site_name\": [\"indeed\", \"zip_recruiter\"],\n    \"results_wanted\": 30\n  }\n}"
      },
      {
        "title": "Example 5: International Job Search",
        "body": "User Prompt:\n\n\"Find software jobs in Germany on Indeed\"\n\nMCP Tool Call:\n\n{\n  \"tool\": \"scrape_jobs_tool\",\n  \"params\": {\n    \"search_term\": \"software developer\",\n    \"location\": \"Berlin\",\n    \"country_indeed\": \"germany\",\n    \"site_name\": [\"indeed\"],\n    \"results_wanted\": 15\n  }\n}"
      },
      {
        "title": "Example 6: Getting Helper Information",
        "body": "User Prompt:\n\n\"What job sites are supported?\"\n\nMCP Tool Call:\n\n{\n  \"tool\": \"get_supported_sites\",\n  \"params\": {}\n}\n\nExpected Output:\n\n{\n  \"sites\": [\n    { \"name\": \"indeed\", \"description\": \"Largest job search engine, most reliable\" },\n    { \"name\": \"linkedin\", \"description\": \"Professional networking platform, rate limited\" },\n    { \"name\": \"glassdoor\", \"description\": \"Jobs with company reviews and salaries\" },\n    { \"name\": \"zip_recruiter\", \"description\": \"Job matching for US/Canada\" },\n    { \"name\": \"google\", \"description\": \"Aggregated job listings\" },\n    { \"name\": \"bayt\", \"description\": \"Middle East job portal\" },\n    { \"name\": \"naukri\", \"description\": \"India's leading job portal\" },\n    { \"name\": \"bdjobs\", \"description\": \"Bangladesh job portal\" }\n  ]\n}"
      },
      {
        "title": "Error 1: Rate Limiting",
        "body": "Scenario: LinkedIn returns a rate limit error.\n\nError Response:\n\n{\n  \"error\": \"RateLimitError\",\n  \"message\": \"LinkedIn rate limit exceeded. Try again later or use different sites.\",\n  \"suggestion\": \"Switch to Indeed or ZipRecruiter which have more lenient rate limits.\"\n}\n\nHow to Handle:\n\nReduce results_wanted to a smaller number (10-15)\nRemove linkedin from site_name temporarily\nAdd delays between searches\nUse proxy configuration if available"
      },
      {
        "title": "Error 2: No Results Found",
        "body": "Scenario: Search returns empty results.\n\nError Response:\n\n{\n  \"jobs\": [],\n  \"total_found\": 0,\n  \"message\": \"No jobs found matching your criteria\"\n}\n\nHow to Handle:\n\nBroaden search terms (e.g., \"engineer\" instead of \"senior principal software engineer\")\nIncrease distance radius\nRemove restrictive filters like hours_old or job_type\nTry different site_name options\nCheck if location spelling is correct"
      },
      {
        "title": "Error 3: Invalid Country Code",
        "body": "Scenario: User specifies an unsupported country for Indeed.\n\nError Response:\n\n{\n  \"error\": \"ValidationError\",\n  \"message\": \"Invalid country_indeed value. Use get_supported_countries to see valid options.\"\n}\n\nHow to Handle:\n\nCall get_supported_countries to get valid country codes\nUse the exact country name (e.g., \"usa\" not \"US\", \"united kingdom\" not \"UK\")"
      },
      {
        "title": "Error 4: Platform-Specific Limitation Conflict",
        "body": "Scenario: User tries to use conflicting filters.\n\nKnown Limitations:\n\nIndeed: Only ONE of these can be used: hours_old, job_type & is_remote, easy_apply\nLinkedIn: Only ONE of these can be used: hours_old, easy_apply\n\nHow to Handle:\n\nInform user of the limitation\nPrioritize the most important filter\nRun separate searches if multiple filters are needed"
      },
      {
        "title": "❌ DO NOT: Request Excessive Results",
        "body": "// BAD - Will likely timeout or get rate limited\n{\n  \"search_term\": \"engineer\",\n  \"results_wanted\": 1000,\n  \"site_name\": [\"linkedin\", \"indeed\", \"glassdoor\", \"zip_recruiter\", \"google\"]\n}\n\nWhy: Requesting too many results from too many sites simultaneously will trigger rate limits and cause timeouts.\n\n✅ DO INSTEAD:\n\n{\n  \"search_term\": \"software engineer\",\n  \"results_wanted\": 20,\n  \"site_name\": [\"indeed\", \"linkedin\"]\n}"
      },
      {
        "title": "❌ DO NOT: Use LinkedIn Extensively",
        "body": "// BAD - LinkedIn is heavily rate limited\n{\n  \"search_term\": \"developer\",\n  \"site_name\": [\"linkedin\"],\n  \"results_wanted\": 100,\n  \"linkedin_fetch_description\": true\n}\n\nWhy: LinkedIn has the strictest rate limits. Using linkedin_fetch_description: true multiplies requests.\n\n✅ DO INSTEAD:\n\nUse Indeed as primary source\nLimit LinkedIn to 10-15 results\nOnly enable linkedin_fetch_description when specifically needed"
      },
      {
        "title": "❌ DO NOT: Use Conflicting Filters",
        "body": "// BAD - Indeed limitation: only one filter group allowed\n{\n  \"search_term\": \"developer\",\n  \"site_name\": [\"indeed\"],\n  \"hours_old\": 24,\n  \"job_type\": \"fulltime\",\n  \"is_remote\": true\n}\n\nWhy: Indeed only supports one of: hours_old, job_type & is_remote, or easy_apply.\n\n✅ DO INSTEAD:\n\n// Either filter by recency\n{\n  \"search_term\": \"developer\",\n  \"site_name\": [\"indeed\"],\n  \"hours_old\": 24\n}\n\n// OR filter by job type\n{\n  \"search_term\": \"developer\",\n  \"site_name\": [\"indeed\"],\n  \"job_type\": \"fulltime\",\n  \"is_remote\": true\n}"
      },
      {
        "title": "❌ DO NOT: Make Vague Searches Without Context",
        "body": "// BAD - Too generic, will return irrelevant results\n{\n  \"search_term\": \"job\"\n}\n\nWhy: Vague searches return poor quality results and waste API calls.\n\n✅ DO INSTEAD:\n\nAlways include specific job titles or skills\nInclude location when known\nUse filters to narrow results"
      },
      {
        "title": "❌ DO NOT: Ignore Error Responses",
        "body": "Why: Rate limits, network issues, and invalid parameters require appropriate handling.\n\n✅ DO INSTEAD:\n\nCheck for error responses before processing results\nImplement retry logic with backoff for rate limits\nProvide helpful messages to users when searches fail"
      },
      {
        "title": "❌ DO NOT: Use Wrong Country Codes",
        "body": "// BAD - Wrong country code format\n{\n  \"search_term\": \"developer\",\n  \"country_indeed\": \"UK\"  // Wrong! Use \"united kingdom\"\n}\n\n✅ DO INSTEAD:\n\nUse get_supported_countries to verify valid country codes\nCommon codes: \"usa\", \"united kingdom\", \"canada\", \"germany\", \"india\""
      },
      {
        "title": "Platform Reliability Ranking",
        "body": "Indeed - Most reliable, good for large searches\nZipRecruiter - Reliable for US/Canada\nGoogle Jobs - Good aggregation, stable\nGlassdoor - Reliable with company insights\nLinkedIn - Most restrictive, use sparingly"
      },
      {
        "title": "Recommended Approach",
        "body": "Start Small: Begin with 10-15 results to test filters\nUse Indeed First: Most reliable for job data\nBe Specific: Use targeted search terms\nFilter Wisely: Use one filter group at a time for Indeed/LinkedIn\nPaginate: Use offset for getting more results instead of high results_wanted"
      },
      {
        "title": "Supported Countries",
        "body": "Call get_supported_countries for the complete list. Common countries include:\n\nCountryCode for country_indeedUSAusaUnited Kingdomunited kingdomCanadacanadaGermanygermanyFrancefranceIndiaindiaAustraliaaustraliaSingaporesingaporeJapanjapanNetherlandsnetherlands"
      },
      {
        "title": "\"Browser/Chromium not installed\"",
        "body": "Run: playwright install chromium (some scrapers use Playwright)"
      },
      {
        "title": "\"No module named 'jobspy'\"",
        "body": "Run: pip install python-jobspy>=1.1.82"
      },
      {
        "title": "\"Rate limit exceeded\"",
        "body": "Reduce results_wanted\nRemove LinkedIn from site_name\nWait 60 seconds before retrying\nConsider using a proxy"
      },
      {
        "title": "Quick Reference",
        "body": "User IntentKey ParametersFind jobs in a specific citysearch_term, locationRemote jobs onlyis_remote: trueRecent postingshours_old: 24 (or 48, 72)Full-time onlyjob_type: \"fulltime\"Quick apply jobseasy_apply: trueSearch specific platformsite_name: [\"indeed\"]International searchcountry_indeed: \"germany\"More resultsresults_wanted: 25Paginate resultsoffset: 25 (after first 25)"
      }
    ],
    "body": "Job Search MCP Skill\n\nThis skill enables AI agents to search for jobs across multiple job boards using the JobSpy MCP Server. JobSpy aggregates job listings from LinkedIn, Indeed, Glassdoor, ZipRecruiter, Google Jobs, Bayt, Naukri, and BDJobs into a unified interface.\n\nWhen to Use This Skill\n\nUse this skill when the user asks you to:\n\nFind job listings matching specific criteria (role, location, company, etc.)\nSearch for remote or on-site positions\nCompare job opportunities across different platforms\nGet salary information for job postings\nFind recently posted jobs (within X hours)\nSearch for jobs with \"Easy Apply\" options\nPrerequisites\nPython 3.10+\nNode.js 16+ (for some server implementations)\nThe JobSpy MCP server installed and configured\nInstallation & Setup\nOption 1: Python MCP Server (Recommended)\n# Install with pip\npip install mcp>=1.1.0 python-jobspy>=1.1.82 pandas>=2.1.0 pydantic>=2.0.0\n\n# Or install with uv (faster)\nuv add mcp python-jobspy pandas pydantic\n\nOption 2: Clone a Pre-built Server\n# Clone the jobspy-mcp-server repository\ngit clone https://github.com/chinpeerapat/jobspy-mcp-server.git\ncd jobspy-mcp-server\n\n# Install dependencies\nuv sync\n# or\npip install -e .\n\nClaude Desktop Configuration\n\nAdd the following to your Claude Desktop config file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):\n\n{\n  \"mcpServers\": {\n    \"jobspy\": {\n      \"command\": \"uv\",\n      \"args\": [\"run\", \"jobspy-mcp-server\"],\n      \"env\": {}\n    }\n  }\n}\n\n\nAlternative configuration (Node.js server):\n\n{\n  \"mcpServers\": {\n    \"jobspy\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/jobspy-mcp-server/src/index.js\"],\n      \"env\": {\n        \"ENABLE_SSE\": \"0\"\n      }\n    }\n  }\n}\n\nMCP Tool Schemas\n1. scrape_jobs_tool (Primary Tool)\n\nSearch for jobs across multiple job boards with comprehensive filtering.\n\nParameters:\n\nParameter\tType\tRequired\tDefault\tDescription\nsearch_term\tstring\t✅ Yes\t-\tJob keywords (e.g., \"software engineer\", \"data scientist\")\nlocation\tstring\tNo\t-\tJob location (e.g., \"San Francisco, CA\", \"Remote\")\nsite_name\tarray\tNo\t[\"indeed\", \"linkedin\", \"zip_recruiter\", \"google\"]\tJob boards to search\nresults_wanted\tinteger\tNo\t15\tNumber of results (1-1000)\njob_type\tstring\tNo\t-\tEmployment type: fulltime, parttime, internship, contract\nis_remote\tboolean\tNo\tfalse\tFilter for remote jobs only\nhours_old\tinteger\tNo\t-\tFilter by posting recency in hours\ndistance\tinteger\tNo\t50\tSearch radius in miles (1-100)\neasy_apply\tboolean\tNo\tfalse\tFilter jobs with easy apply option\ncountry_indeed\tstring\tNo\t\"usa\"\tCountry for Indeed/Glassdoor searches\nlinkedin_fetch_description\tboolean\tNo\tfalse\tFetch full LinkedIn descriptions (slower)\noffset\tinteger\tNo\t0\tPagination offset\nverbose\tinteger\tNo\t1\tLogging level (0=errors, 1=warnings, 2=all)\n\nSupported Values for site_name:\n\nlinkedin - Professional networking platform (rate limited)\nindeed - Largest job search engine (most reliable)\nglassdoor - Jobs with company reviews and salaries\nzip_recruiter - Job matching for US/Canada\ngoogle - Aggregated job listings\nbayt - Middle East job portal\nnaukri - India's leading job portal\nbdjobs - Bangladesh job portal\n\nSupported Values for job_type:\n\nfulltime\nparttime\ninternship\ncontract\n2. get_supported_countries\n\nReturns the complete list of supported countries for job searches. No parameters required.\n\n3. get_supported_sites\n\nReturns detailed information about all supported job board sites. No parameters required.\n\n4. get_job_search_tips\n\nReturns tips and best practices for effective job searching. No parameters required.\n\nJob Post Response Schema\n\nWhen jobs are returned, each job post contains the following fields:\n\ninterface JobPost {\n  // Core fields (all platforms)\n  title: string;                    // Job title\n  company: string;                  // Company name\n  company_url?: string;             // Company website URL\n  job_url: string;                  // Direct link to job posting\n  location: {\n    country?: string;\n    city?: string;\n    state?: string;\n  };\n  is_remote: boolean;               // Whether job is remote\n  description?: string;             // Job description (markdown format)\n  job_type?: \"fulltime\" | \"parttime\" | \"internship\" | \"contract\";\n  \n  // Salary information\n  salary?: {\n    interval?: \"yearly\" | \"monthly\" | \"weekly\" | \"daily\" | \"hourly\";\n    min_amount?: number;\n    max_amount?: number;\n    currency?: string;\n    salary_source?: \"direct_data\" | \"description\";  // Parsed from posting\n  };\n  \n  date_posted?: string;             // ISO date string\n  emails?: string[];                // Contact emails if available\n  \n  // LinkedIn specific\n  job_level?: string;               // Seniority level\n  \n  // LinkedIn & Indeed specific\n  company_industry?: string;\n  \n  // Indeed specific\n  company_country?: string;\n  company_addresses?: string[];\n  company_employees_label?: string;\n  company_revenue_label?: string;\n  company_description?: string;\n  company_logo?: string;\n  \n  // Naukri specific\n  skills?: string[];\n  experience_range?: string;\n  company_rating?: number;\n  company_reviews_count?: number;\n  vacancy_count?: number;\n  work_from_home_type?: string;\n}\n\nExample Prompts → MCP Calls → Outputs\nExample 1: Basic Job Search\n\nUser Prompt:\n\n\"Find me 10 software engineer jobs in San Francisco\"\n\nMCP Tool Call:\n\n{\n  \"tool\": \"scrape_jobs_tool\",\n  \"params\": {\n    \"search_term\": \"software engineer\",\n    \"location\": \"San Francisco, CA\",\n    \"results_wanted\": 10,\n    \"site_name\": [\"indeed\", \"linkedin\"]\n  }\n}\n\n\nExpected Output:\n\n{\n  \"jobs\": [\n    {\n      \"title\": \"Software Engineer\",\n      \"company\": \"TechCorp Inc.\",\n      \"location\": { \"city\": \"San Francisco\", \"state\": \"CA\" },\n      \"job_url\": \"https://indeed.com/viewjob?jk=abc123\",\n      \"salary\": { \"min_amount\": 120000, \"max_amount\": 180000, \"interval\": \"yearly\" },\n      \"job_type\": \"fulltime\",\n      \"is_remote\": false\n    }\n    // ... more jobs\n  ],\n  \"total_found\": 10\n}\n\nExample 2: Remote Jobs Search\n\nUser Prompt:\n\n\"Search for remote Python developer positions from Indeed and ZipRecruiter\"\n\nMCP Tool Call:\n\n{\n  \"tool\": \"scrape_jobs_tool\",\n  \"params\": {\n    \"search_term\": \"Python developer\",\n    \"location\": \"Remote\",\n    \"is_remote\": true,\n    \"site_name\": [\"indeed\", \"zip_recruiter\"],\n    \"results_wanted\": 20\n  }\n}\n\nExample 3: Recent Jobs with Filters\n\nUser Prompt:\n\n\"Find data scientist jobs in Boston posted in the last 24 hours\"\n\nMCP Tool Call:\n\n{\n  \"tool\": \"scrape_jobs_tool\",\n  \"params\": {\n    \"search_term\": \"data scientist\",\n    \"location\": \"Boston, MA\",\n    \"hours_old\": 24,\n    \"site_name\": [\"linkedin\", \"glassdoor\", \"indeed\"],\n    \"linkedin_fetch_description\": true\n  }\n}\n\nExample 4: Entry-Level with Easy Apply\n\nUser Prompt:\n\n\"Look for entry-level marketing jobs in New York with easy apply options\"\n\nMCP Tool Call:\n\n{\n  \"tool\": \"scrape_jobs_tool\",\n  \"params\": {\n    \"search_term\": \"junior marketing\",\n    \"location\": \"New York, NY\",\n    \"job_type\": \"fulltime\",\n    \"easy_apply\": true,\n    \"site_name\": [\"indeed\", \"zip_recruiter\"],\n    \"results_wanted\": 30\n  }\n}\n\nExample 5: International Job Search\n\nUser Prompt:\n\n\"Find software jobs in Germany on Indeed\"\n\nMCP Tool Call:\n\n{\n  \"tool\": \"scrape_jobs_tool\",\n  \"params\": {\n    \"search_term\": \"software developer\",\n    \"location\": \"Berlin\",\n    \"country_indeed\": \"germany\",\n    \"site_name\": [\"indeed\"],\n    \"results_wanted\": 15\n  }\n}\n\nExample 6: Getting Helper Information\n\nUser Prompt:\n\n\"What job sites are supported?\"\n\nMCP Tool Call:\n\n{\n  \"tool\": \"get_supported_sites\",\n  \"params\": {}\n}\n\n\nExpected Output:\n\n{\n  \"sites\": [\n    { \"name\": \"indeed\", \"description\": \"Largest job search engine, most reliable\" },\n    { \"name\": \"linkedin\", \"description\": \"Professional networking platform, rate limited\" },\n    { \"name\": \"glassdoor\", \"description\": \"Jobs with company reviews and salaries\" },\n    { \"name\": \"zip_recruiter\", \"description\": \"Job matching for US/Canada\" },\n    { \"name\": \"google\", \"description\": \"Aggregated job listings\" },\n    { \"name\": \"bayt\", \"description\": \"Middle East job portal\" },\n    { \"name\": \"naukri\", \"description\": \"India's leading job portal\" },\n    { \"name\": \"bdjobs\", \"description\": \"Bangladesh job portal\" }\n  ]\n}\n\nError Handling Examples\nError 1: Rate Limiting\n\nScenario: LinkedIn returns a rate limit error.\n\nError Response:\n\n{\n  \"error\": \"RateLimitError\",\n  \"message\": \"LinkedIn rate limit exceeded. Try again later or use different sites.\",\n  \"suggestion\": \"Switch to Indeed or ZipRecruiter which have more lenient rate limits.\"\n}\n\n\nHow to Handle:\n\nReduce results_wanted to a smaller number (10-15)\nRemove linkedin from site_name temporarily\nAdd delays between searches\nUse proxy configuration if available\nError 2: No Results Found\n\nScenario: Search returns empty results.\n\nError Response:\n\n{\n  \"jobs\": [],\n  \"total_found\": 0,\n  \"message\": \"No jobs found matching your criteria\"\n}\n\n\nHow to Handle:\n\nBroaden search terms (e.g., \"engineer\" instead of \"senior principal software engineer\")\nIncrease distance radius\nRemove restrictive filters like hours_old or job_type\nTry different site_name options\nCheck if location spelling is correct\nError 3: Invalid Country Code\n\nScenario: User specifies an unsupported country for Indeed.\n\nError Response:\n\n{\n  \"error\": \"ValidationError\",\n  \"message\": \"Invalid country_indeed value. Use get_supported_countries to see valid options.\"\n}\n\n\nHow to Handle:\n\nCall get_supported_countries to get valid country codes\nUse the exact country name (e.g., \"usa\" not \"US\", \"united kingdom\" not \"UK\")\nError 4: Platform-Specific Limitation Conflict\n\nScenario: User tries to use conflicting filters.\n\nKnown Limitations:\n\nIndeed: Only ONE of these can be used: hours_old, job_type & is_remote, easy_apply\nLinkedIn: Only ONE of these can be used: hours_old, easy_apply\n\nHow to Handle:\n\nInform user of the limitation\nPrioritize the most important filter\nRun separate searches if multiple filters are needed\nAnti-Patterns (What NOT to Do)\n❌ DO NOT: Request Excessive Results\n// BAD - Will likely timeout or get rate limited\n{\n  \"search_term\": \"engineer\",\n  \"results_wanted\": 1000,\n  \"site_name\": [\"linkedin\", \"indeed\", \"glassdoor\", \"zip_recruiter\", \"google\"]\n}\n\n\nWhy: Requesting too many results from too many sites simultaneously will trigger rate limits and cause timeouts.\n\n✅ DO INSTEAD:\n\n{\n  \"search_term\": \"software engineer\",\n  \"results_wanted\": 20,\n  \"site_name\": [\"indeed\", \"linkedin\"]\n}\n\n❌ DO NOT: Use LinkedIn Extensively\n// BAD - LinkedIn is heavily rate limited\n{\n  \"search_term\": \"developer\",\n  \"site_name\": [\"linkedin\"],\n  \"results_wanted\": 100,\n  \"linkedin_fetch_description\": true\n}\n\n\nWhy: LinkedIn has the strictest rate limits. Using linkedin_fetch_description: true multiplies requests.\n\n✅ DO INSTEAD:\n\nUse Indeed as primary source\nLimit LinkedIn to 10-15 results\nOnly enable linkedin_fetch_description when specifically needed\n❌ DO NOT: Use Conflicting Filters\n// BAD - Indeed limitation: only one filter group allowed\n{\n  \"search_term\": \"developer\",\n  \"site_name\": [\"indeed\"],\n  \"hours_old\": 24,\n  \"job_type\": \"fulltime\",\n  \"is_remote\": true\n}\n\n\nWhy: Indeed only supports one of: hours_old, job_type & is_remote, or easy_apply.\n\n✅ DO INSTEAD:\n\n// Either filter by recency\n{\n  \"search_term\": \"developer\",\n  \"site_name\": [\"indeed\"],\n  \"hours_old\": 24\n}\n\n// OR filter by job type\n{\n  \"search_term\": \"developer\",\n  \"site_name\": [\"indeed\"],\n  \"job_type\": \"fulltime\",\n  \"is_remote\": true\n}\n\n❌ DO NOT: Make Vague Searches Without Context\n// BAD - Too generic, will return irrelevant results\n{\n  \"search_term\": \"job\"\n}\n\n\nWhy: Vague searches return poor quality results and waste API calls.\n\n✅ DO INSTEAD:\n\nAlways include specific job titles or skills\nInclude location when known\nUse filters to narrow results\n❌ DO NOT: Ignore Error Responses\n\nWhy: Rate limits, network issues, and invalid parameters require appropriate handling.\n\n✅ DO INSTEAD:\n\nCheck for error responses before processing results\nImplement retry logic with backoff for rate limits\nProvide helpful messages to users when searches fail\n❌ DO NOT: Use Wrong Country Codes\n// BAD - Wrong country code format\n{\n  \"search_term\": \"developer\",\n  \"country_indeed\": \"UK\"  // Wrong! Use \"united kingdom\"\n}\n\n\n✅ DO INSTEAD:\n\nUse get_supported_countries to verify valid country codes\nCommon codes: \"usa\", \"united kingdom\", \"canada\", \"germany\", \"india\"\nRate Limiting & Best Practices\nPlatform Reliability Ranking\nIndeed - Most reliable, good for large searches\nZipRecruiter - Reliable for US/Canada\nGoogle Jobs - Good aggregation, stable\nGlassdoor - Reliable with company insights\nLinkedIn - Most restrictive, use sparingly\nRecommended Approach\nStart Small: Begin with 10-15 results to test filters\nUse Indeed First: Most reliable for job data\nBe Specific: Use targeted search terms\nFilter Wisely: Use one filter group at a time for Indeed/LinkedIn\nPaginate: Use offset for getting more results instead of high results_wanted\nSupported Countries\n\nCall get_supported_countries for the complete list. Common countries include:\n\nCountry\tCode for country_indeed\nUSA\tusa\nUnited Kingdom\tunited kingdom\nCanada\tcanada\nGermany\tgermany\nFrance\tfrance\nIndia\tindia\nAustralia\taustralia\nSingapore\tsingapore\nJapan\tjapan\nNetherlands\tnetherlands\nTroubleshooting\n\"Browser/Chromium not installed\"\n\nRun: playwright install chromium (some scrapers use Playwright)\n\n\"No module named 'jobspy'\"\n\nRun: pip install python-jobspy>=1.1.82\n\n\"Rate limit exceeded\"\nReduce results_wanted\nRemove LinkedIn from site_name\nWait 60 seconds before retrying\nConsider using a proxy\nQuick Reference\nUser Intent\tKey Parameters\nFind jobs in a specific city\tsearch_term, location\nRemote jobs only\tis_remote: true\nRecent postings\thours_old: 24 (or 48, 72)\nFull-time only\tjob_type: \"fulltime\"\nQuick apply jobs\teasy_apply: true\nSearch specific platform\tsite_name: [\"indeed\"]\nInternational search\tcountry_indeed: \"germany\"\nMore results\tresults_wanted: 25\nPaginate results\toffset: 25 (after first 25)"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Amoghpurohit/job-search-mcp",
    "publisherUrl": "https://clawhub.ai/Amoghpurohit/job-search-mcp",
    "owner": "Amoghpurohit",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/job-search-mcp",
    "downloadUrl": "https://openagent3.xyz/downloads/job-search-mcp",
    "agentUrl": "https://openagent3.xyz/skills/job-search-mcp/agent",
    "manifestUrl": "https://openagent3.xyz/skills/job-search-mcp/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/job-search-mcp/agent.md"
  }
}