Landed MCP Server

Landed MCP Server

Search AI-native jobs, prepare applications, and study for interviews β€” from any MCP client.

Category
Visit Server

README

<div align="center">

Landed MCP Server

Search AI-native jobs, prepare applications, and study for interviews β€” from any MCP client.

A public Model Context Protocol server that gives Claude, Cursor, VS Code, and any other MCP-capable agent live access to Landed's ranked, fit-scored job corpus.

License: MIT Model Context Protocol Works with Claude Works with Cursor

</div>


What is this?

Landed MCP connects your AI assistant to a curated, continuously-updated corpus of AI-native roles (AI Engineer, ML Engineer, RAG Engineer, AI PM, GTM Engineer, and more). Instead of copy-pasting job boards into a chat, your agent can:

  • πŸ”Ž Search jobs β€” ranked and fit-scored against a structured brief (role, skills, seniority, remote, compensation, industries…), or from a plain-English description.
  • πŸ“ Prepare applications β€” pull a job's real application form, grouped into standard / screening / EEO fields, so the agent can auto-fill and draft answers before you apply.
  • πŸŽ“ Study for interviews β€” fetch free, curated interview-prep, portfolio, and roadmap resources.

It speaks Streamable HTTP and works with any MCP client. Use the hosted server in seconds, or self-host this repo against your own Landed API.

Free to start. Anonymous callers get a shared free budget β€” no signup, no key. Add an API token for unlimited, personalized results.


Quick start (hosted)

The hosted server lives at:

https://mcp.landed.jobs/mcp

Pick your client below. Everything works anonymously out of the box β€” just omit the Authorization header. Add Authorization: Bearer lnd_live_… (mint one at Landed β†’ Settings β†’ API tokens) for unlimited, brief-personalized search.

Claude Code

The one-liner (CLI):

# Anonymous (free tier)
claude mcp add --transport http landed-jobs https://mcp.landed.jobs/mcp

# Authenticated (unlimited, personalized)
claude mcp add --transport http landed-jobs https://mcp.landed.jobs/mcp \
  --header "Authorization: Bearer lnd_live_your_token_here"

Then in a session: /mcp to confirm it's connected, and try the find_jobs prompt.

Claude Desktop

Open Settings β†’ Developer β†’ Edit Config (this opens claude_desktop_config.json), then add:

{
  "mcpServers": {
    "landed-jobs": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote", "https://mcp.landed.jobs/mcp",
        "--header", "Authorization: Bearer lnd_live_your_token_here"
      ]
    }
  }
}

Restart Claude Desktop. Drop the --header line for the free anonymous tier.

Claude Desktop bridges remote HTTP servers through mcp-remote. If your build has native Custom Connectors (Settings β†’ Connectors β†’ Add custom connector), you can instead paste https://mcp.landed.jobs/mcp directly.

Cursor

Create .cursor/mcp.json in your project (or ~/.cursor/mcp.json globally):

{
  "mcpServers": {
    "landed-jobs": {
      "url": "https://mcp.landed.jobs/mcp",
      "headers": { "Authorization": "Bearer lnd_live_your_token_here" }
    }
  }
}

Then enable landed-jobs under Settings β†’ MCP. Omit headers for the free tier.

VS Code (GitHub Copilot / Agent Mode)

Create .vscode/mcp.json:

{
  "servers": {
    "landed-jobs": {
      "type": "http",
      "url": "https://mcp.landed.jobs/mcp",
      "headers": { "Authorization": "Bearer lnd_live_your_token_here" }
    }
  }
}

Open the Chat view β†’ Agent mode β†’ the tools appear under the πŸ”§ picker.

Windsurf

Edit ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "landed-jobs": {
      "serverUrl": "https://mcp.landed.jobs/mcp",
      "headers": { "Authorization": "Bearer lnd_live_your_token_here" }
    }
  }
}

Cline (VS Code extension)

Open Cline β†’ MCP Servers β†’ Configure, or edit cline_mcp_settings.json:

{
  "mcpServers": {
    "landed-jobs": {
      "type": "streamableHttp",
      "url": "https://mcp.landed.jobs/mcp",
      "headers": { "Authorization": "Bearer lnd_live_your_token_here" }
    }
  }
}

Any other MCP client

Point it at https://mcp.landed.jobs/mcp using the Streamable HTTP transport. Pass Authorization: Bearer <token> if you have one. Quick sanity check from a terminal:

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"}'

Tools

Tool What it does Anonymous cost
search_jobs Ranked, fit-scored jobs. Fill structured fields (role, skills, remote, seniority, comp, industries…) or a free-text query (parsed into filters server-side). 1 unit / job returned
get_job_form Application form for a jobId, grouped standard / screening / eeo for answer prep. free
get_learning_content Curated interview-prep, portfolio, and roadmap resources. free

Prompts (guided workflows)

MCP prompts are reusable, user-invocable skills that teach the agent how to chain the tools and present results as a clean shortlist β€” never raw JSON. In most clients they show up as slash-commands.

Prompt Args What it guides
find_jobs describe? Search, then present a ranked, fit-scored shortlist + next steps.
prepare_application jobId Fetch the form; auto-fill standard, draft screening, leave EEO to the user.
prep_for_role role? Pull learning resources for a role and suggest a study order.

The server also ships always-on instructions (tool overview, presentation rules, freemium behavior) that compliant clients load automatically.


Auth & pricing

Tier How What you get
Anonymous No header A shared free budget of job-units. Metered by a hybrid of your IP and an issued X-Landed-Anon token (echoed on every response β€” resend it to keep your budget across sessions).
Authenticated Authorization: Bearer lnd_live_… Unlimited search, personalized to your saved brief + profile. Mint a token at Landed β†’ Settings β†’ API tokens.

Every result carries a freemium block so your agent can see how much budget is left and how to lift the cap.


Architecture

This repository is a thin, self-hostable proxy. It speaks MCP and forwards to the hosted Landed API β€” it holds no database, no ranking engine, and no job data.

   MCP client                 landed-mcp (this repo)              Landed API
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   HTTP    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  HTTPS   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚ Claude /    β”‚ ───────▢  β”‚ β€’ MCP protocol + tools β”‚ ──────▢  β”‚ β€’ search engine        β”‚
 β”‚ Cursor /    β”‚  /mcp     β”‚ β€’ forwards caller credsβ”‚          β”‚ β€’ job corpus + forms   β”‚
 β”‚ VS Code …   β”‚ ◀───────  β”‚ β€’ local learning list  β”‚ ◀──────  β”‚ β€’ auth Β· freemium meterβ”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

The proxy resolves nothing itself: it forwards the caller's API token (or an anonymous id) to the Landed API, which validates it, runs the search, meters usage, and returns results plus a freemium block the proxy relays verbatim. The get_learning_content catalog is static and lives in this repo (src/mcp/catalog/learning.ts) β€” that tool works with no backend at all.


Self-host

Run your own proxy against the Landed API (or your own deployment of it).

Prerequisites

  • Node.js β‰₯ 20
  • pnpm (npm i -g pnpm)
  • A Landed API base URL and its shared internal secret

Run

git clone git@github.com:landedjobs/landed-mcp.git
cd landed-mcp
pnpm install
cp .env.example .env       # then fill in the values below
pnpm dev                   # hot-reload dev server
# β†’ [mcp] listening on :8090 β€” POST /mcp β†’ https://api.landed.jobs/api/v1

For production: pnpm start.

Environment variables

Variable Required Default Description
LANDED_API_BASE βœ“ http://localhost:8000/api/v1 Hosted Landed API base, including the /api/v1 prefix.
LANDED_INTERNAL_SECRET βœ“ β€” Shared secret authenticating this proxy to the API (must match the server's INTERNAL_SERVICE_SECRET).
PORT 8090 HTTP port to listen on.
CORS_ORIGINS * Comma-separated allowlist of origins, or *.
RATE_LIMIT_PER_MIN 60 Per-IP first-line request cap. The API's freemium meter is the real economic cap.

Endpoints

Method Path Purpose
POST /mcp MCP Streamable HTTP endpoint (stateless).
GET /healthz Liveness probe ({ "ok": true }).

Development

pnpm dev           # watch + reload
pnpm check-types   # tsc --noEmit
pnpm start         # run once

Project layout

src/
β”œβ”€β”€ index.ts                 # bootstrap: start the HTTP server
β”œβ”€β”€ config/                  # env β†’ typed config
β”œβ”€β”€ http/                    # express shell + per-IP rate limiter
β”œβ”€β”€ services/api-client.ts   # typed fetch client β†’ Landed API
β”œβ”€β”€ types.ts                 # the API response contract (owned here)
└── mcp/
    β”œβ”€β”€ server.ts            # instructions + tool/prompt registration
    β”œβ”€β”€ prompts.ts           # find_jobs / prepare_application / prep_for_role
    β”œβ”€β”€ catalog/learning.ts  # static, public learning resources
    └── tools/               # search_jobs Β· get_job_form Β· get_learning_content

Stack: TypeScript Β· Express Β· @modelcontextprotocol/sdk Β· Zod. No database, no build step (runs on tsx).


Contributing

Issues and PRs welcome β€” bug fixes, new client setup guides, and learning-catalog additions especially. Please run pnpm check-types before opening a PR.

License

MIT Β© Landed

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured