Skip to main content
Glama

Indeed MCP Server

一个托管式 Model Context Protocol (MCP) 服务器,为 Claude、Cursor、Windsurf 以及任何其他 MCP 客户端提供两个只读的 Indeed 工具。可以按关键词和地点搜索职位列表,也可以完整读取单条职位发布,全部以结构化 JSON 返回;整个过程无需 Indeed 开发者账号,也无需合作伙伴审批。

它读取的是未登录访客就能看到的公开职位发布内容。

https://mcp.hasdata.com/api/mcp?apis=indeed

Glama score tool contract MCP Tools License

目录

Related MCP server: JobDataLake MCP Server

你需要什么

一个 MCP 客户端,以及来自 控制台 的 HasData API 密钥。该密钥免费创建,无需绑定银行卡,试用额度按 5 积分/次计算大约可以覆盖 200 次调用。这是一个远程服务器,因此最简单的接入方式就是一个 URL 加一个 x-api-key 请求头,不需要运行任何容器,整个流程中也不需要 Indeed 开发者账号。若你的客户端只支持 stdio,则可以通过一个轻量启动器间接连接该远程服务器,这个启动器已发布为 npm 上的 @hasdata/indeed-mp 和 PyPI 上的 hasdata-indeed-mp,见下文。

快速开始

服务器 URL 对每个客户端都是同一个。我们在 Claude Code 和 Claude Desktop 中实际运行过。其他部分则按各客户端自身的文档规范,以远程地址服务器的方式配置。

字段

URL

https://mcp.hasdata.com/api/mcp?apis=indeed

传输方式

HTTP,可流式

认证请求头

x-api-key: HASDATA_API_KEY

支持 OAuth 的客户端可以直接将同一个 URL 添加为连接器并登录,这样就不需要在配置文件中写入密钥。

claude mcp add --transport http indeed "https://mcp.hasdata.com/api/mcp?apis=indeed" \
  --header "x-api-key: HASDATA_API_KEY"

到 Settings,然后选 Connectors,再选 Add custom connector,粘贴 https://mcp.hasdata.com/api/mcp?apis=indeed 并登录。

如果走配置文件方法,Claude Desktop 只加载本地 (stdio) 服务器,所以要实现 远程服务器,需要通过一个 stdio 启动器。@hasdata/indeed-mcp 这个就是这个启动器,它从环境中读取密钥。将其添加到 claude_desktop_config.json

{
  "mcpServers": {
    "indeed": {
      "command": "npx",
      "args": ["-y", "@hasdata/indeed-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}

如果换成 Python 而不是 Node,可以将启动器换成 PyPI 包,uvx 会直接运行该包,无需手工安装:

{
  "mcpServers": {
    "indeed": {
      "command": "uvx",
      "args": ["hasdata-indeed-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}

~/.cursor/mcp.json 应用于所有项目,或者 .cursor/mcp.json 用于单个项目:

{
  "mcpServers": {
    "indeed": {
      "url": "https://mcp.hasdata.com/api/mcp?apis=indeed",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

~/.codeium/windsurf/mcp_config.json。Windsurf 使用的字段名是 serverUrl,不是 url

{
  "mcpServers": {
    "indeed": {
      "serverUrl": "https://mcp.hasdata.com/api/mcp?apis=indeed",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

工作区中的 .vscode/mcp.json

{
  "servers": {
    "indeed": {
      "type": "http",
      "url": "https://mcp.hasdata.com/api/mcp?apis=indeed",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

示例提示

这些是提示词,不是代码。粘贴一个进去,代理会自行选择相应工具。每条提示都标明了所需调用的次数,因为每次成功调用都需要消耗 5 积分。

在 calculate 排行榜上搜索 "python developer" 职位,按日期排列,并给我最近的十个,包括公司和薪资。

一次调用,5 积分。列表页已经包含了公司、薪资和发布日期。项目

选那条搜索中最上面的职位,抓取其完整职位描述和要求。

一次调用,5 积分。列表中负责职位 URL,详情工具可直接使用。

在 Austin 寻找 "data analyst" 职位,然后对有列出具 薪水的三个职位拉取完整详情。

四次调用,20 积分。一次列表调用,再加三次详情调用 (各职位一次)。

比较 "registered nurse" 在 Chicago 和 Houston 两个城市的公布工资情况。

两次调用,10 积分,每个城市各一次列表调用。

薪资只有当职位详情自己写出时才会出现在列表里,所以,凡是要求"列出有薪资的职位"之类的提示词,应依赖该字段过滤,而不是想当然地认为会返回薪资。

分页每次都会产生一次调用,通过 start 偏移实现。

工具

共两个工具,只读。以下例子是根据真实调用结果整理的,数据值会随 Indeed 更新而变动,请重点参考其结构。每个工具名称都链接到对应的端点文档,那里有 完整的字段列表。

示例展示的是实际数据载荷,而不是整个响应。一个 tools/call 的返回结果中只含唯一个一个文本块,而这段文本本身就是 JSON,包含 urlstatustextjson,其中抓取的数据在 json 下面。对原始的 JSON-RPC 响应来说,路径是 result.content[0].text,解析后再取 .json。聊天客户端会替你完成这层解析,而直接调用 API 的代码则需要人为敲处理。

获取 Indeed 职位列表

hasdata_indeed_ng_getJobListings

按关键词和地点返回一页搜索结果。

参数

类型

必填

说明

keyword

string

求职者会输入的搜索词

location

string

城市与州,或 Indeed 接受的任何位置字符串

sort

string

默认为 relevance,取 date 按最新优先

domain

string

国家站点,例如 au.indeed.com。默认为美国站点

start

number

下一页的偏移量,是数字而非 URL。从上一个响应中的 pagination.nextPage 读取该值

返回 searchInformationjobs 数组、peopleAlsoSearchForpaginationpagination.nextPage 是下一页的 URL。每条职位带 titlecompanylocationurl、简单 descriptionsponsored、相对 date 和绝对 isoDate,一个 details 数组,里面是 Full-timeHybrid work 那样的标签,还有 benefits 数组;如果职位本身说明 了薪资,还会返回 salary 对象。

注意,两侧的 details 是字符串数组。下面职位详情目录所返回的 details 却是一个对象,内含 jobTypeworkSetting 两个数组。二者名字一样,形态不同,请根据每个工具自身来解读。

{
  "title": "Hedge Fund Application Developer",
  "company": "TBA",
  "location": "Stamford, CT 06901",
  "url": "https://www.indeed.com/pagead/clk?...",
  "sponsored": true,
  "date": "30+ days ago",
  "isoDate": "2025-06-03T17:22:54.869Z",
  "details": ["Full-time", "Hybrid work"],
  "benefits": ["Health insurance", "401(k)", "401(k) matching"],
  "salary": { "min": 80000, "max": 150000, "type": "YEARLY" }
}

获取 Indeed 职位详情

hasdata_indeed_job_getJobDetails

通过职位 URL 获取单条职位的完整详情。

参数

类型

必填

说明

url

string

职位 URL,即搜索结果里的 url 字段

返回 titlecompanylocationsponsored、一个包含 jobTypeworkSetting 数组的 details 对象、可能存在的 salary 对象,以及正文的两个版本:description(纯文本)和 descriptionHtml(保留列表与段落标记的同一内容)。需要结构化数据时用 descriptionHtml,需要给模型纯文本时用 description

{
  "title": "Python Developer",
  "company": "Think IT Technologies",
  "location": "New York, NY 10114",
  "sponsored": false,
  "details": { "jobType": ["Contract"], "workSetting": ["In-person"] },
  "salary": { "min": 60.5, "max": 65, "type": "HOURLY" },
  "description": "Overview\nWe are seeking a Python Developer...",
  "descriptionHtml": "<p><b>Overview</b></p><p>We are seeking a Python Developer...</p>"
}

错误与失败路径

你的客户端几乎不会从某个工具调用返回的 HTTP错误码中直接看到失败。MCP 层一律以 200 响应,把失败放到返回结果内部,设置 isError: true,并在文本中说明原因。智能体读到的是一条消息,而不是你预期的 HTTP 状态行。

错误的密钥会出现在工具输出里,而不是连接失败。 tools/list 接受任何非空密钥并返回这两个工具,也就是说客户端能正常完成握手,显示绿色。第一次工具调用时才会返回 isError: true 和文本 "HasData API error: 401 Unauthorized"。请关注这一串,因为在之前没有任何地方会报告该问题。

缺少密钥才是唯一真正的 HTTP 错误。 授权在任何工具执行前进行,连接本身会以 401 失败。CORS 头已设置,浏览器客户端可以看到不带差错误码的真实状态,而不是不透明 的网络错误。

破坏工具 schema 的参数会在成为抓取之前就被拒绝。 服务器返回 isError: true 和文本 "MCP error -32602: 验证错误输入",并指出违规字段。不会获取数据,也不会计费。

搜索结果没有匹配项时,返回的是带空 jobs 数组的成功结果,而不是报错。 没有职位符合关键词和地点组合时,返回的数据中 requestMetadata.status 仍是 ok,这时要先检查数组长度再迭代。

职位若已下架,则返回 400 状态码,requestMetadata.statuserror Indeed 的职位会很快失效,因此很久以前的搜索返回的 URL 可能已经不存在了。

只要返回的数据里包含内容,往往也包含 requestMetadata.id,在提 support 工单时提供该 ID 会非常有用。

定价、免费额度与限制

每个 Indeed 工具每次成功调用需要 5 credits。响应大小不影响价格。一个有 50 个职位的列表页和一个有 2 个职位的列表页费用相同。

免费试用约 30 天 1,000 credits,不需要绑卡,相当于 200 次 Indeed 调用。试用结束后,活跃账户只要余额低于 100 credits,每天都会自动获得 100 credits 补充,因此一个低用量 的代理基础架构完全可以永久留在免费层。

付费方案起步价为 0 美元/月按 $ 49 月(200,000 credits),也就是 40,000 次调用。单位价格随用量递减,从$0 入门方案 的每千次调用 $1.23 降到 $0.50(Business 套餐)**$0.42(Growth 套餐)**以及更大的 高用量套餐 里的 $0.37

套餐同时也决定了并发能力。免费试用为 1 个并行请求,Startup 15 个,Business 30 个,Growth 50 个,高用量为 200 至 1,500 个。任何无人值守的调用请对超限的情况做防御性处理。

非的请求不会计费。一次成功调用虽然结果为空,仍是算一次调用。

工具选择

apis 查询参数决定你的智能体能看见哪些工具。工具越少,模型把上下文花在工具定义上的就越少,选择错误工具的可能也就降低。

?apis=indeed                     the two tools in this repo
?apis=indeed,glassdoor           add Glassdoor jobs
?apis=indeed,google_serp         add Google search

该参数接受 indeed 这样的平台名和 indeed_listing 这样的独立 API 名。拼写错误的名字会被忽略。如果所有名字都错,请求会以 400 失败,返回内容会在显示未识别出的值的同时给出全部有效值。如果完全去除该参数,同一端点将暴露全部 57 个 HasData 工具。

与其他方案的对比

Indeed 已停掉了公开的 Publisher 和 Job Search API,现在程序化访问依赖批准的合作伙伴关系和 ATS 集成,而不是自助申请密钥。对大多数搜索组合的公开职位列表与单条的完整读取而言,没有公开的官方通道。

Indeed 官方接入

此服务器

访问

合作伙伴或 ATS 批准

一个密钥和一个 URL

范围

合作伙伴授权所赋予的任何内容

任意公开搜索或职位发布

设置

需要业务审核

输出

取决于集成方

结构化 JSON,薪资已预解析

写入

仅面向已批准合作伙伴的职位申请流程

只读,仅公开数据

此服务器不做什么。 它不提供职位申请,没有雇主后台,没有候选人数据,也没有非公开职位。它只读取未登录访客所能看到的内容。

常见问题

有没有官方的 Indeed MCP 服务器?

Indeed 并没有发布官方服务器。此服务器由 HasData 维护,并且读取的是公开页面,所以不需要 Indeed 开发者账户。

什么叫 Indeed MCP 服务器?

它是一种将 Indeed 职位数据作为 AI 客户端可以调用的工具暴露给客户端的服务器。客户端通过 Model Context Protocol 发送一个工具调用,服务器获取数据并返回结构化 JSON,模型再结合结果进行下一步处理。此服务器提供两个工具并在远程运行。

我需要 Indeed 的 API 密钥或合作账户吗?

不需要。唯一的凭据是你的 HasData 密钥。这个服务器不需要申请 Any Publisher 账户,因为工具只读 Indeed 的公开页面。

如何分页查看超过一屏的结果?

start 偏移量作为一个数字传给职位列表工具,而不是把 URL 传进去。返回的响应里有 pagination.nextPage,其中的 start 值就是下一页的起始偏移;请读取这个数字并传回去,而不是导入 URL。

为什么有时候没有薪资?

因为职位说明当中没有标注薪资。只有当 Indeed 给出了数字时,salary 对象才会显示,请在读取时使用防御性检查。

我可以将这个和 HasData 的其他 API 一起用吗?

可以。apis 参数接收一个由名称组成的列表,?apis=indeed,glassdoor 会同时给你的 agent 返回 Indeed 和 Glassdoor;去掉该参数 之后就可以使用全部其他 API。

合规与个人数据

HasData 只访问公开可获取的数据。平台的条款可能会限制自动化访问,你需要为自己是否符合规定负责。如果你收集的数据中包含个人数据,请确保自己有合法的依据(GDPR、CCPA 或你所在辖区对应的规则)。

HasData 链接

工具页和构建器

Indeed Scraper API

服务器文档

MCP 服务器文档

全部 57 个工具集成于一个服务器

HasData/hasdata-mcp

客户端示例教程

MCP 客户端与集成

其他所有采集能力

Indeed Scraper API 以及 54 个更多

套餐及点数费用

套餐与点数费用

密钥和使用

HasData dashboard

开发

本仓库内容是远程服务器的配置和文档。没有构建步骤,也不需要容器化。

test/ 中的测试断言工具契约——也就是那些没有 commit、当前仓库的变更也可能被破坏的部分。它们验证 ?apis=indeed 是否恰好返回两个工具,每个工具是否实际声明了其必需的参数,工具名称是否发生了变化,以及实际使用的密钥是否已被接受。最后一个检查会真实调用一次工具并消耗 5 个 credits,这正是“金丝雀”所需的代价,以便它能因正确的理由而失败。

# macOS and Linux
HASDATA_API_KEY=your_key_here npm test

# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm test

同一套测试在所有旁的每次 push 以及每周一次的 schedule 中运行,因为上游工具列表可能在没有修改本仓库的情况下发生变化。失败意味着工具列表有所变化,密钥已失效,或者末端不可达,断言消息会明确指出具体是哪一种。

贡献

对所有已有工具表和响应样例的校正是最有用的贡献,因为这些内容容易偏离。请您包含您发出的调用与返回。分叉(fork)发来的 Pull Request 在没有密钥的情况下也会运行测试套件,实时检查会跳过而不是标红。

许可证

MIT。参见 许可证文件

Install Server
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables users to search LinkedIn's public job listings with advanced filters like location, salary, and experience level. It allows MCP-compatible clients to retrieve real-time job opportunities without requiring LinkedIn authentication or API keys.
    1
    2
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables searching over 1 million enriched job listings from 20,000+ companies directly from MCP-compatible AI tools. Provides tools for job search, company profiles, and AI-powered similar job recommendations with real-time data updates.
    4
    81
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Live Indeed job-postings data for AI agents via the RolesAPI REST API: search listings by keyword and location, and fetch role details, salary, description, company, and benefits. Available as drop-in agent skills or a hosted remote MCP server.
    MIT No Attribution
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables searching real job listings from multiple job boards (Indeed, LinkedIn, Glassdoor, Google Jobs, etc.) through a single MCP tool, designed for use as a custom connector in Claude Cowork.

View all related MCP servers

Related MCP Connectors

  • Live job postings from 30+ ATS feeds and job boards, one schema. Live results need a Bearer key.

  • Google Jobs listings with direct apply links via the Apify Google Jobs Scraper, hosted MCP.

  • One MCP for 160+ live web-data APIs — clean JSON from sites that block scrapers.

View all MCP Connectors

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/HasData/indeed-mcp'

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