Claude Code for Property Managers

Claude Code reads any tool's API documentation and builds the Claude integration for you. Here's how, using PriceLabs as a worked example.

I used this exact method to build integrations for:

Claude Code welcome screen showing the terminal boot with 'Welcome to Claude Code' in orange block letters

Install Claude Code in 5 minutes

Written for someone who has never opened Terminal before. If you already use Claude Code, skip to the PriceLabs hero demo.

1

Open Terminal

On macOS: press Cmd + Space to open Spotlight, type Terminal, and hit Enter. A black or white window appears with a blinking cursor. That's it.

On Windows: press the Windows key, type Terminal or PowerShell, and hit Enter. The same kind of window appears.

You don't need to understand what Terminal is. You're going to paste one line, hit enter, and never think about it again.

2

Paste the install command

Copy the command below and paste it into Terminal, then hit Enter. It downloads Claude Code from Anthropic and installs it. Takes about a minute.

Terminal · macOS / Linux
curl -fsSL https://claude.ai/install.sh | bash

On Windows, use PowerShell (not Command Prompt) and paste this instead:

PowerShell · Windows
irm https://claude.ai/install.ps1 | iex

What you're pasting. The curl command downloads a small installer script from Anthropic's official domain (claude.ai) and runs it. It installs the claude command into your user account. No admin password. Nothing to uninstall later. Full install notes at code.claude.com.

3

Close Terminal and reopen it

This is the step people forget. Close the Terminal window you installed from and open a brand new one. That lets your shell pick up the new claude command. If you skip this step, the next step fails with "command not found."

4

Start Claude Code and log in

In the new Terminal window, type:

Terminal
claude

The first time you run it, Claude Code opens a browser tab and asks you to log in with your Claude account. Use the same login you use at claude.ai. Once you're logged in, Terminal shows a prompt where you can start typing. You're in.

Do you need to pay extra? No. Claude Code is included with your existing Claude Pro or Max subscription. There's no separate API key, no credit card, no token balance to watch. If you already pay for Claude, you already pay for Claude Code.

The demo: Claude Code builds its own PriceLabs integration

You hand Claude Code the PriceLabs API documentation URL plus your API key. It reads the docs, writes the connector, tests it, and hands you the config file. Every other Claude integration guide walks you through writing this code by hand. Claude Code doesn't need you to.

Heads up on what you're about to see. The exact tool names and endpoint paths Claude Code generates will depend on what it discovers in PriceLabs' current Customer API spec when you run the demo. The shape of the code (auth handling, fetch wrapper, MCP tool definitions) will look like the example below, but the specifics may differ. That's the point. You don't need to know the endpoint paths. Claude Code reads the docs for you.

1

Grab your PriceLabs API key

Log in to pricelabs.co/account_settings. Click API Details, click Enable, and copy the API key it generates. Treat it like a password. Don't paste it into chat windows, don't commit it to GitHub, don't share it over Slack.

PriceLabs charges $1/listing/month for API access. If you're a 40 unit operator, this demo costs you $40/month to try. If you decide you don't need it after a week, disable it from the same page.

2

Start a new Claude Code session

In Terminal, make a new folder for the project and start Claude Code inside it. This is where Claude Code will write the connector files.

Terminal
mkdir ~/pricelabs-mcp
cd ~/pricelabs-mcp
export PRICELABS_API_KEY="paste-your-key-here"
claude

The export line puts your API key into an environment variable for this session. Claude Code can read it by name (PRICELABS_API_KEY) without ever seeing the actual value in the transcript. Cleaner than pasting it into the prompt.

3

Give Claude Code the one prompt

Once Claude Code is running, paste the prompt below. One message. No follow up required.

Prompt
I want to connect Claude to my PriceLabs account so I can
ask Claude about my listings and their recommended prices.

PriceLabs has a public Customer API documented here:
https://help.pricelabs.co/portal/en/kb/articles/pricelabs-api

My PriceLabs API key is in the environment variable
PRICELABS_API_KEY. Please:

1. Read the PriceLabs API docs and identify the 4-5 most
   useful endpoints for a vacation rental operator.
2. Write an MCP server in Node.js that exposes those
   endpoints as Claude tools.
3. Set up a package.json, install dependencies.
4. Print the exact claude_desktop_config.json block I need
   to add to connect this server to Claude Desktop.
5. Tell me how to test it.
4

Watch Claude Code work

This is what your Terminal looks like while Claude Code runs. The whole process takes 3 to 6 minutes depending on your internet.

Terminal · Claude Code session live
~/pricelabs-mcp $ claude

Welcome to Claude Code. Type your request below.

> I want to connect Claude to my PriceLabs account...

I'll build a PriceLabs MCP server for you. Let me start
by reading the API documentation to see what's available.

· Fetching help.pricelabs.co/portal/en/kb/articles/pricelabs-api
· Following link to the Swagger spec
· Reading OpenAPI definition

Found the PriceLabs Customer API. Authentication uses
an X-API-Key header. The most useful endpoints for a
vacation rental operator look like:

  1. List all listings on the account
  2. Get recommended prices for a listing
  3. Get the price calendar for a listing over a date range
  4. List manual price overrides on a listing

Creating the project structure now.

· Running: npm init -y
· package.json created

· Running: npm install @modelcontextprotocol/sdk zod
· Installed 24 packages in 6.2s

· Writing index.js (128 lines)
· Writing README.md
· Adding "type": "module" to package.json

· Running: node index.js (dry check)
· Server starts cleanly, 4 tools registered

Done. The server is at ~/pricelabs-mcp/index.js and
exposes four tools: list-listings, get-listing-prices,
get-price-calendar, and list-overrides.

Here is the block to add to your claude_desktop_config.json:

{
  "mcpServers": {
    "pricelabs": {
      "command": "node",
      "args": ["/Users/you/pricelabs-mcp/index.js"],
      "env": {
        "PRICELABS_API_KEY": "your-key-here"
      }
    }
  }
}

Once you add that block, fully quit and reopen Claude
Desktop (Cmd+Q on macOS). The PriceLabs tools will show
up in the tools menu and you can start asking questions.

> _

Everything above happens without you touching the keyboard after the initial prompt. Claude Code narrates what it's doing as it goes.

5

Example of the code Claude Code writes

For the curious. This is roughly the shape of the index.js Claude Code produces. Your version will differ in the exact tool names and endpoint paths depending on what it found in the Swagger spec at runtime.

index.js · auto-generated shape
#!/usr/bin/env node
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const API_KEY = process.env.PRICELABS_API_KEY;
const BASE_URL = "https://api.pricelabs.co/v1";

if (!API_KEY) {
  console.error("Missing PRICELABS_API_KEY environment variable");
  process.exit(1);
}

async function pl(path, params = {}) {
  const url = new URL(`${BASE_URL}${path}`);
  for (const [k, v] of Object.entries(params)) {
    if (v !== undefined && v !== null && v !== "") {
      url.searchParams.append(k, String(v));
    }
  }
  const res = await fetch(url.toString(), {
    method: "GET",
    headers: {
      "X-API-Key": API_KEY,
      Accept: "application/json",
    },
  });
  if (!res.ok) {
    throw new Error(`PriceLabs ${res.status}: ${await res.text()}`);
  }
  return res.json();
}

const server = new McpServer({ name: "pricelabs", version: "1.0.0" });

server.tool(
  "list-listings",
  "List all PriceLabs listings on the account with current recommended prices.",
  {},
  async () => {
    const data = await pl("/listings");
    return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
  }
);

server.tool(
  "get-price-calendar",
  "Get the recommended price calendar for a listing over a date range.",
  {
    listing_id: z.string().describe("PriceLabs listing ID"),
    start_date: z.string().describe("ISO date (YYYY-MM-DD)"),
    end_date: z.string().describe("ISO date (YYYY-MM-DD)"),
  },
  async ({ listing_id, start_date, end_date }) => {
    const data = await pl(`/listings/${listing_id}/prices`, { start_date, end_date });
    return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
  }
);

server.tool(
  "list-overrides",
  "List manual price overrides set on a PriceLabs listing.",
  {
    listing_id: z.string().describe("PriceLabs listing ID"),
  },
  async ({ listing_id }) => {
    const data = await pl(`/listings/${listing_id}/overrides`);
    return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
  }
);

const transport = new StdioServerTransport();
await server.connect(transport);

About 80 lines. Everything you need to connect Claude to PriceLabs, written while you were pouring a coffee.

Once it's connected, try these

Restart Claude Desktop fully (Cmd+Q then reopen), and ask:

"Show me every PriceLabs listing I own and its current recommended nightly rate. Sort by the biggest gap between my set price and the recommended price."
"Which of my listings don't have a recommended price available for next weekend?"
"Compare my recommended prices for the next 30 days against the same 30 days last year. Where is PriceLabs most bullish?"

Other guides in this cluster

If you want a hand-tuned walkthrough for a specific platform instead of the meta skill above, we've also published these:

Troubleshooting

"claude: command not found" after install

You skipped step 3. Close the Terminal window you installed from and open a brand new one. The claude command is only picked up by new shell sessions.

If it still doesn't work after a fresh Terminal, the installer may not have added Claude Code to your PATH. Run ls ~/.local/bin/claude to see if the binary exists. If it does, your shell's PATH variable doesn't include that directory. Add export PATH="$HOME/.local/bin:$PATH" to your ~/.zshrc (macOS default) or ~/.bashrc and reopen Terminal.

Claude Code can't fetch the PriceLabs API docs URL

Some documentation pages are behind Cloudflare bot protection or require JavaScript to load. If Claude Code says it can't read the docs, paste the Swagger JSON URL directly. For PriceLabs that's usually the OpenAPI spec linked from the help article, not the Swagger UI page.

Worst case, download the OpenAPI spec to your project folder and tell Claude Code to read the local file instead.

Claude Code wrote the server but Claude Desktop doesn't see the tools

Claude Desktop only reads claude_desktop_config.json at startup. Fully quit the app (Cmd+Q on macOS, right click the tray icon and select Quit on Windows) and reopen it. A window close is not the same as a quit.

Also double check the path to index.js in the config file is absolute, not relative. Run pwd inside your project folder to get the correct absolute path.

The generated server returns 401 Unauthorized

Your API key isn't reaching the server. Two common causes: the env block in claude_desktop_config.json isn't set, or the key expired. Open claude_desktop_config.json and make sure PRICELABS_API_KEY is explicitly set in the env object for the server entry (environment variables from your shell don't propagate into Claude Desktop).

Need help getting this set up?

Book a free 15-minute call and I'll walk you through it. Bring an API key for any tool you use and we'll build you a working Claude integration live on the call.

Book a call