# MCP server (/docs/mcp)



The LinkFetch MCP server (`linkfetch-mcp`) exposes the LinkFetch API as
typed tools, so any client that speaks the
[Model Context Protocol](https://modelcontextprotocol.io) — Claude
Desktop, Claude Code, Cursor, Windsurf, Continue, Zed — can call
LinkFetch natively without you writing HTTP plumbing.

It runs locally over stdio, talks to `https://api.linkfetch.io` with
your bearer key, and is metered exactly like the REST API: same
credits, same rate limits, same `X-Request-Id` audit trail.

## Install [#install]

You need a LinkFetch API key from the [dashboard](/dashboard). Put it
in `LINKFETCH_API_KEY` and point your client at `npx -y linkfetch-mcp`.

### Claude Desktop [#claude-desktop]

Edit `~/Library/Application Support/Claude/claude_desktop_config.json`
(macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):

```json
{
  "mcpServers": {
    "linkfetch": {
      "command": "npx",
      "args": ["-y", "linkfetch-mcp"],
      "env": { "LINKFETCH_API_KEY": "sk_live_..." }
    }
  }
}
```

Restart the client. LinkFetch appears in the tools drawer.

### Claude Code [#claude-code]

```bash
claude mcp add linkfetch -e LINKFETCH_API_KEY=sk_live_... -- npx -y linkfetch-mcp
```

### Cursor, Windsurf, Zed, Continue [#cursor-windsurf-zed-continue]

Any client that runs MCP servers over stdio works — configure a server
with command `npx`, args `["-y", "linkfetch-mcp"]`, and
`LINKFETCH_API_KEY` in the environment.

## Environment variables [#environment-variables]

| Variable            | Required | Default                    | Notes                                               |
| ------------------- | -------- | -------------------------- | --------------------------------------------------- |
| `LINKFETCH_API_KEY` | yes      | —                          | Bearer token from the dashboard.                    |
| `LINKFETCH_API_URL` | no       | `https://api.linkfetch.io` | Override for the sandbox or a self-hosted instance. |

## Tools exposed [#tools-exposed]

| Tool                              | Maps to                                          | Credits |
| --------------------------------- | ------------------------------------------------ | ------- |
| `linkfetch_search_jobs`           | `GET /v1/jobs`                                   | 1       |
| `linkfetch_get_job`               | `GET /v1/jobs/:id`                               | 1       |
| `linkfetch_get_job_by_url`        | `GET /v1/jobs/by-url`                            | 1       |
| `linkfetch_get_job_applicants`    | applicant-count history for one posting          | 1       |
| `linkfetch_jobs_database_info`    | coverage, freshness and schema of the jobs index | 0       |
| `linkfetch_search_locations`      | `GET /v1/locations/search`                       | 1       |
| `linkfetch_get_profile`           | `GET /v1/profiles`                               | 5       |
| `linkfetch_get_company`           | `GET /v1/companies/:slug`                        | 3       |
| `linkfetch_get_company_employees` | `GET /v1/companies/:slug/employees`              | 5       |

Jobs and location tools read from our own index and need nothing but
the key. Profile and company tools resolve through the user's own
LinkedIn session via the [Chrome extension](/docs/extension); on a
cache miss they return `extension_required` so the agent can ask the
user to open the page.

Try it: &#x2A;"Find five staff-engineering jobs in Berlin posted this week
and rank them by applicant velocity."*

## Provenance in MCP [#provenance-in-mcp]

Tool results include the same `meta.provenance` block as the REST
responses. Agents that need to decide whether to re-fetch should
inspect `freshness_days` and call again with `fresh: true` when the
data is too stale for the task.

## Auth & limits [#auth--limits]

The server authenticates with the same bearer key as the REST API.
See [Authentication](/docs/auth), [Pricing](/docs/pricing), and
[Rate limits](/docs/rate-limits).
