内容
<a name="top"></a>
<div align="center">
<a href="https://landed.jobs"><img src="https://static.b100x.ai/email/landed-wordmark.png" alt="Landed" width="200"></a>
<img src="https://static.b100x.ai/github-repos/images/landed-mcp/banner.svg" alt="Landed MCP Server" width="100%">
[](LICENSE)
[](https://modelcontextprotocol.io)
[](#claude-desktop)
[](#cursor)
**从任何MCP客户端搜索AI原生工作,准备申请,并为面试学习。**
一个公共的 [模型上下文协议](https://modelcontextprotocol.io) 服务器,为Claude、Cursor、VS Code和任何MCP-capable代理提供Landed的排名、适合度评分的工作语料库的实时访问。
*由 [Landed](https://landed.jobs) 维护 — 每日AI原生工作匹配、每个申请的代理帮助和模拟面试准备。*
</div>
---
## 这是什么?
**Landed MCP** 将您的AI助手连接到精选、不断更新的AI原生角色语料库(AI工程师、机器学习工程师、RAG工程师、AI产品经理、增长团队工程师等)。您的代理可以:
- 🔎 **搜索工作** — 根据结构化简介(角色、技能、资历、远程、薪酬、行业等)或纯文本描述进行排名和适合度评分。
- 📝 **准备申请** — 拉取工作申请表,分为标准/筛选/EEO字段,以便代理可以自动填写并草拟答案。
- 🎓 **为面试学习** — 获取精选的面试准备、作品集和路线图资源。
它支持 **Streamable HTTP** 并与任何MCP客户端配合使用。使用 **托管** 服务器或 **自托管** 此仓库以适应您的Landed API。
> **免费开始。** 匿名调用者获得共享的免费预算 — 无需注册,无需密钥。添加API令牌以获取无限、简化的个性化结果。
---
## 快速开始(托管)
托管服务器位于:
```
https://mcp.landed.jobs/mcp
```
选择下面的客户端。所有功能 **匿名** 开箱即用 — 只需省略 `Authorization` 头部。添加 `Authorization: Bearer lnd_live_…`(在 [Landed → 设置 → API令牌](https://landed.jobs) 中获取)以获取无限、简化的搜索。
### Claude 代码
一行命令(CLI):
```bash
# 匿名(免费层)
claude mcp add --transport http landed-jobs https://mcp.landed.jobs/mcp
# 身份验证(无限,个性化)
claude mcp add --transport http landed-jobs https://mcp.landed.jobs/mcp \
--header "Authorization: Bearer lnd_live_your_token_here"
```
然后在会话中: `/mcp` 以确认已连接,并尝试 `find_jobs` 提示。
### Claude 桌面版
打开 **设置 → 开发者 → 编辑配置** (这将打开 `claude_desktop_config.json),然后添加:
```jsonc
{
"mcpServers": {
"landed-jobs": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://mcp.landed.jobs/mcp",
"--header", "Authorization: Bearer lnd_live_your_token_here"
]
}
}
}
```
重启Claude桌面版。省略 `--header` 行以使用免费的匿名层。
> Claude桌面版通过 [`mcp-remote`](https://www.npmjs.com/package/mcp-remote) 桥接远程HTTP服务器。
> 如果您的构建具有原生的 **自定义连接器** (设置 → 连接器 → *添加自定义连接器*),您可以直接粘贴 `https://mcp.landed.jobs/mcp`。
### Cursor
在您的项目中创建 `.cursor/mcp.json` (或全局的 `~/.cursor/mcp.json`):
```jsonc
{
"mcpServers": {
"landed-jobs": {
"url": "https://mcp.landed.jobs/mcp",
"headers": { "Authorization": "Bearer lnd_live_your_token_here" }
}
}
}
```
然后在 **设置 → MCP** 下启用 **landed-jobs**。省略 `headers` 以使用免费层。
### VS Code(GitHub Copilot / 代理模式)
创建 `.vscode/mcp.json`:
```jsonc
{
"servers": {
"landed-jobs": {
"type": "http",
"url": "https://mcp.landed.jobs/mcp",
"headers": { "Authorization": "Bearer lnd_live_your_token_here" }
}
}
}
```
打开聊天视图 → **代理** 模式 → 工具出现在 🔧 选择器下。
### Windsurf
编辑 `~/.codeium/windsurf/mcp_config.json`:
```jsonc
{
"mcpServers": {
"landed-jobs": {
"serverUrl": "https://mcp.landed.jobs/mcp",
"headers": { "Authorization": "Bearer lnd_live_your_token_here" }
}
}
}
```
### Cline(VS Code扩展)
打开 **Cline → MCP服务器 → 配置**,或编辑 `cline_mcp_settings.json`:
```jsonc
{
"mcpServers": {
"landed-jobs": {
"type": "streamableHttp",
"url": "https://mcp.landed.jobs/mcp",
"headers": { "Authorization": "Bearer lnd_live_your_token_here" }
}
}
}
```
### 任何其他MCP客户端
使用 **Streamable HTTP** 传输将客户端指向 `https://mcp.landed.jobs/mcp`。如果您有令牌,请传递 `Authorization: Bearer <token>`。终端快速检查:
```bash
curl -s -X POST https://mcp.landed.jobs/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
```
---
## 工具
| 工具 | 功能 | 匿名成本 |
|------|--------------|:---:|
| `search_jobs` | 排名、适合度评分的工作。填写结构化字段(角色、技能、远程、资历、薪酬、行业...)或自由文本 `query`(服务器端解析为筛选器)。 | 1 单位/返回工作 |
| `get_job_form` | 工作申请表,分为 `standard` / `screening` / `eeo` 以便答案准备。 | **免费** |
| `get_learning_content` | 精选的面试准备、作品集和路线图资源。 | **免费** |
## 提示(引导工作流)
MCP **提示** 是可重复使用的、用户可调用的技能,它们教会代理如何链接工具并以干净的短列表呈现结果 — 而不是原始JSON。在大多数客户端中,它们显示为斜杠命令。
| 提示 | 参数 | 引导 |
|--------|------|----------------|
| `find_jobs` | `describe?` | 搜索,然后呈现排名、适合度评分的短列表 + 下一步。 |
| `prepare_application` | `jobId` | 获取表格;自动填充标准、草拟筛选,留给用户EEO。 |
| `prep_for_role` | `role?` | 拉取角色的学习资源并建议学习顺序。 |
服务器还附带始终在线的 `instructions` (工具概述、呈现规则、freemium行为),兼容的客户端会自动加载。
---
## 身份验证和定价
| 层级 | 方式 | 您获得的 |
|------|-----|--------------|
| **匿名** | 无头部 | 共享的免费预算 单位作业。 通过混合使用您的IP和颁发的 `X-Landed-Anon`令牌(在每个响应中回声 — 重新发送以在会话之间保持预算)。 |
| **身份验证** | `Authorization: Bearer lnd_live_…` | 无限搜索,根据您保存的简介 +个人资料进行个性化。 在 [Landed → 设置 → API令牌](https://landed.jobs) 中获取令牌。 |
每个结果都带有 `freemium` 块,以便您的代理可以查看剩余预算以及如何解除限制。
---
## 架构
该仓库是一个 **薄、自托管代理**。它支持MCP并转发到托管的Landed API — 它 **不持有任何数据库、排名引擎或工作数据**。
```
MCP客户端 landed-mcp(此仓库) Landed API
┌─────────────┐ HTTP ┌────────────────────────┐ HTTPS ┌────────────────────────┐
│ Claude / │ ───────▶ │ • MCP协议 + 工具 │ ──────▶ │ • 搜索引擎 │
│ Cursor / │ /mcp │ • 转发调用者凭证│ │ • 工作语料库 + 表单 │
│ VS Code … │ ◀─────── │ • 本地学习列表 │ ◀────── │ • 身份验证 · freemium 计量│
└─────────────┘ └────────────────────────┘ └────────────────────────┘
```
代理本身不解决任何问题:它将调用者的API令牌(或匿名ID)转发到Landed API,后者验证它、运行搜索、计量使用情况并返回结果以及 `freemium` 块,代理直接转发。 `get_learning_content` 目录是静态的,位于此仓库中( [`src/mcp/catalog/learning.ts`](src/mcp/catalog/learning.ts) ) — 该工具无需后端即可工作。
---
## 自托管
针对Landed API(或您自己的部署)运行您自己的代理。
### 先决条件
- **Node.js ≥ 20**
- **pnpm** (`npm i -g pnpm`)
- 一个 **Landed API基准URL** 及其 **共享内部密钥**
### 运行
```bash
git clone git@github.com:landedjobs/landed-mcp.git
cd landed-mcp
pnpm install
cp .env.example .env # 然后填写以下值
pnpm dev # 热重载开发服务器
# → [mcp] 监听 :8090 — POST /mcp → https://api.landed.jobs/api/v1
```
生产环境:`pnpm start`.
### 环境变量
| 变量 | 必需 | 默认值 | 描述 |
|----------|:---:|---------|-------------|
| `LANDED_API_BASE` | ✓ | `http://localhost:8000/api/v1` | 托管的Landed API基准URL,**包括** `/api/v1` 前缀。 |
| `LANDED_INTERNAL_SECRET` | ✓ | — | 共享密钥,用于此代理验证API(必须与服务器的 `INTERNAL_SERVICE_SECRET` 匹配)。 |
| `PORT` | | `8090` | 监听的HTTP端口。 |
| `CORS_ORIGINS` | | `*` | 以逗号分隔的允许来源列表,或 `*`。 |
| `RATE_LIMIT_PER_MIN` | | `60` | 每个IP的第一行请求上限。 API的freemium计量器是实际的经济上限。 |
### 端点
| 方法 | 路径 | 目的 |
|--------|------|---------|
| `POST` | `/mcp` | MCP Streamable HTTP端点(无状态)。 |
| `GET` | `/healthz` | 存活探测( `{ "ok": true }`)。 |
---
## 开发
```bash
pnpm dev # 监视 + 重载
pnpm check-types # tsc --noEmit
pnpm start # 运行一次
```
**项目布局**
```
src/
├── index.ts # 启动:启动HTTP服务器
├── config/ # 环境变量 → 类型配置
├── http/ # express shell + 每个IP的速率限制器
├── services/api-client.ts # 类型化的fetch客户端 → Landed API
├── types.ts # API响应契约(此处拥有)
└── mcp/
├── server.ts # 说明 + 工具/提示注册
├── prompts.ts # find_jobs / prepare_application / prep_for_role
├── catalog/learning.ts # 静态、公共学习资源
└── tools/ # search_jobs · get_job_form · get_learning_content
```
技术栈:TypeScript · Express · [`@modelcontextprotocol/sdk`](https://github.com/modelcontextprotocol/typescript-sdk) · Zod。 无数据库,无构建步骤(在 `tsx` 上运行)。
---
## 贡献
欢迎提交问题和PR — 特别是错误修复、新客户端设置指南和学习目录添加。请在打开PR之前运行 `pnpm check-types`。
## 许可证
[MIT](LICENSE) © Landed