> ## Documentation Index
> Fetch the complete documentation index at: https://kardow.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect your job board to Claude

> Manage your Kardow job board from Claude using the MCP connector: post jobs, approve pending listings, and pull analytics in plain language.

## Overview

Kardow ships a hosted [MCP](https://modelcontextprotocol.io) server that connects your job board to Claude. Once connected, you can manage your board in plain language:

* "Post this job to my board: [https://careers.example.com/jobs/123](https://careers.example.com/jobs/123)"
* "List my pending jobs and publish the ones from Acme Corp"
* "Show me the jobs posted this week with their salaries and share links"
* "Write a blog post about remote hiring trends, add a cover image, and publish it"
* "Find my draft pages and publish the About page"
* "How did my board perform in the last 30 days compared to the previous period?"

Everything runs through your own API key, so Claude can only do what that key is allowed to do, with the same rate limits as the [REST API](/docs/api-reference/introduction).

Content is written as HTML, and images are hosted for you: `upload_asset` takes any image URL, stores it on your board, and returns a `cdn.kardow.com` link to use as a cover image or inside the page body.

## Prerequisites

* A Kardow account and job board
* A Kardow API key (created in **Settings > API**)
* Claude (any of: claude.ai on a paid plan, Claude Desktop, or Claude Code)

<Note>
  Your API key is tied to your organization. Keep it private. Anyone with the key, or with a connector URL that contains it, can manage your board.
</Note>

## Step 1: Create an API key

1. Go to your [Kardow Dashboard](https://app.kardow.com)
2. Navigate to **Settings > API**
3. Click **Create API Key**
4. Copy the key. You will paste it into Claude in the next step

<Frame>
  <img src="https://mintcdn.com/kardow/rOxUsYjM3bR9_C1x/images/image-6.png?fit=max&auto=format&n=rOxUsYjM3bR9_C1x&q=85&s=27edc95d85ffc8e004dd1e5c41e4bb23" alt="Image" width="1579" height="916" data-path="images/image-6.png" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/kardow/rOxUsYjM3bR9_C1x/images/image-7.png?fit=max&auto=format&n=rOxUsYjM3bR9_C1x&q=85&s=83c52578ff941359fc8c2cd35a05eb81" alt="Image" width="684" height="631" data-path="images/image-7.png" />
</Frame>

## Step 2: Connect Claude

The server lives at `https://mcp.kardow.com`. How you pass your key depends on the app.

<Tabs>
  <Tab title="claude.ai / Claude Desktop">
    claude.ai and Claude Desktop connect via a **custom connector**. Because these apps cannot send custom headers, your API key goes in the connector URL.

    1. Open **Settings > Connectors** and click **Add custom connector**.

    <Frame>
      <img src="https://mintcdn.com/kardow/rOxUsYjM3bR9_C1x/images/image-8.png?fit=max&auto=format&n=rOxUsYjM3bR9_C1x&q=85&s=73f3247c31bee02b5ccc34513325d871" alt="Image" width="1143" height="835" data-path="images/image-8.png" />
    </Frame>

    2. Fill in the form:

    * **Name**: `Kardow`
    * **Remote MCP server URL**: `https://mcp.kardow.com?key=YOUR_API_KEY`
    * Leave **OAuth Client ID** and **OAuth Client Secret** blank.

    <Frame>
      <img src="https://mintcdn.com/kardow/rOxUsYjM3bR9_C1x/images/image-9.png?fit=max&auto=format&n=rOxUsYjM3bR9_C1x&q=85&s=d074270c60a574e0297d258ecee52169" alt="Image" width="574" height="590" data-path="images/image-9.png" />
    </Frame>

    3. Replace `YOUR_API_KEY` with the key from Step 1, then click **Add**.
    4. Start a new chat and confirm the Kardow tools appear in the tools menu.

    <Frame>
      <img src="https://mintcdn.com/kardow/rOxUsYjM3bR9_C1x/images/image-10.png?fit=max&auto=format&n=rOxUsYjM3bR9_C1x&q=85&s=6dfad057c965ad18ec86877e225246db" alt="Image" width="970" height="1148" data-path="images/image-10.png" />
    </Frame>

    <Warning>
      The connector URL contains your API key. Treat the whole URL as a secret and do not share it.
    </Warning>
  </Tab>

  <Tab title="Claude Code">
    Claude Code can send headers, so your key goes in an `Authorization` header instead of the URL:

    ```bash theme={null}
    claude mcp add --transport http kardow https://mcp.kardow.com \
      --header "Authorization: Bearer YOUR_API_KEY"
    ```

    Then run `claude`, and ask it to "list my Kardow jobs" to confirm the connection.
  </Tab>

  <Tab title="Other MCP clients">
    Any client that supports remote MCP servers works. Point it at `https://mcp.kardow.com` and provide your key one of two ways:

    * **Header** (preferred, if supported): `Authorization: Bearer YOUR_API_KEY`
    * **Query parameter**: add `?key=YOUR_API_KEY` to the URL

    Older clients that only speak SSE can use `https://mcp.kardow.com/sse` instead.
  </Tab>
</Tabs>

## Step 3: Try it

Start a chat and ask Claude to do something with your board:

```text theme={null}
List my pending jobs, then publish the ones from Acme Corp.
```

Claude will call the tools and report back. On the first tool call, your client may ask you to approve the connector's actions.

## What Claude can do

| Tool                             | What it does                                                     |
| -------------------------------- | ---------------------------------------------------------------- |
| `scrape_job_from_url`            | Reads a job posting page so Claude can extract the details       |
| `create_job`                     | Creates a job posting on your board                              |
| `list_jobs`                      | Lists jobs with search, filters, and date range                  |
| `get_job`                        | Gets the full details of one job                                 |
| `update_job`                     | Updates a job (approve pending, fix fields, expire)              |
| `delete_job`                     | Permanently deletes a job                                        |
| `find_employer`                  | Looks up an employer account to post on their behalf             |
| `resolve_location`               | Turns a place description into a specific location on your board |
| `list_locations`                 | Lists the places your board already covers                       |
| `list_categories`                | Lists job categories (assign one by name on `create_job`)        |
| `list_applications`              | Lists candidate applications, filterable by job and status       |
| `get_analytics`                  | Returns visitors, pageviews, top jobs, and top sources           |
| `list_pages`                     | Lists your custom pages and blog posts                           |
| `get_page`                       | Gets one page or blog post, body included as HTML                |
| `create_page`                    | Creates a page or blog post from HTML content                    |
| `update_page`                    | Edits a page or blog post, or publishes a draft                  |
| `list_authors` / `create_author` | Manages blog bylines                                             |
| `list_assets`                    | Searches your media library (images)                             |
| `upload_asset`                   | Imports an image URL into your library and returns a hosted link |

### How Claude places a job

Claude resolves the location before posting, rather than guessing from text:

1. `resolve_location` turns `"33 Rue des Freres-Moncion, Gatineau"` into the Gatineau entity and returns its id
2. `create_job` receives that id, so the job lands on the right city page, filter and map

Street addresses are filed under their city on purpose, since that is how candidates browse. The full address stays on the job as its readable location, and its exact coordinates are kept for map pins.

`create_job` reports back what was actually saved for the two fields that are easiest to get wrong:

```
Apply:    email: jobs@acme.com
Location: Gatineau, QC (geocoded)
```

If the apply line says `Kardow-hosted application form` when you expected an external destination, or the location says `none`, ask Claude to fix it with `update_job`.

## Troubleshooting

<AccordionGroup>
  <Accordion title="Claude says the tools aren't available">
    Open a new chat after adding the connector. Some clients only load connectors for chats started after they were added. Also confirm the connector shows as connected in your settings.
  </Accordion>

  <Accordion title="Every call returns an authentication error">
    Your key is missing or wrong. Check that the URL ends with `?key=YOUR_API_KEY` (claude.ai / Desktop) or that your `Authorization: Bearer` header is set (Claude Code), and that the key is active in **Settings > API**.
  </Accordion>

  <Accordion title="A tool returns 'not authorized' or a permission error">
    The API key does not have access to that action for your organization. Regenerate the key or check its scopes in **Settings > API**. Employer lookups (`find_employer`), for example, need member read access.
  </Accordion>
</AccordionGroup>

## How it works

The MCP server is a thin wrapper around the Kardow [REST API](/docs/api-reference/introduction). Each tool call is authenticated with your API key and subject to the same permissions and rate limits. Nothing is stored on the MCP server; it forwards requests to `api.kardow.com` and returns the results to Claude.
