Yes, you can connect Barefoot to Claude. Barefoot Technologies exposes an open API as a SOAP web service, BarefootService.asmx, hosted at portals.barefoot.com, with operations for properties, availability, rates, reservations, guests, and owners. There is no official Barefoot MCP server as of July 2026, so the working path is a small Model Context Protocol server you run locally: it signs each SOAP request with the username, password, and barefootAccount credentials Barefoot issues you, parses the XML responses to JSON, and hands the results to Claude Desktop. Setup takes about 25 minutes once you have credentials.
Barefoot actually has an API worth wrapping
Barefoot is one of the longest-standing PMS platforms serving professional vacation rental managers. In our analysis of the VRMA member directory, Barefoot ranked sixth among all property management systems, powering 4.2 percent of members whose PMS we could identify, almost entirely established professional operators (see our PMS generational shift analysis). Integration has been part of that longevity: according to Barefoot, the company "has been a leader in API integration for more than 15 years," and its partnerships page describes an open API, direct integrations with Vrbo, Airbnb, and TripAdvisor, and what Barefoot calls "the most extensive partner program in the industry."
For connecting outside software, Barefoot documents two doors:
Barefoot iLink
Barefoot's quick website connector, which the company describes as "perfect for smaller companies who are just getting started." It links a website to the booking engine with minimal setup, but it is not a general-purpose data API.
The Barefoot API
According to Barefoot's website integration page, the API "gives your internet marketing staff or partners all the control of how to organize how data is presented from the Barefoot system," and is "a well documented API that is open to other creative uses as well." Connecting Claude is exactly that kind of creative use: the MCP server below is just another API consumer.
What you'll be able to ask Claude
Once connected, Claude can answer the questions an established manager normally digs through Barefoot screens or exported reports for:
What the web service exposes
The BarefootService endpoint publishes its full operation list publicly, each with sample SOAP 1.1 and SOAP 1.2 requests and responses. A sampling of the operations listed on the live service page:
portals.barefoot.com/barefootwebservice/
GetAllPropertyGetPropertyDetailsGetPropertyRatesGetPropertyAllImgsGetPropertyAvailabilityByDateGetPropertyAvailabilityByTermIsPropertyAvailabilityGetGuestReservationsGetFolioInfoByNumberPropertyBookingCancelReservationDWGetTenantInfoByPageGetTenantListGetOwnersGetOwnerInfoCreateQuoteGetQuoteDetailGetQuoteRatesDetailusername, password, and barefootAccount. The server we build only calls read operations.Prerequisites
- A Barefoot account with web service credentials. Barefoot issues these directly; there is no self-serve developer portal. See step 1.
- Claude Desktop installed, or the Claude Code CLI. Download Claude Desktop.
- Node.js 18 or later. Check with
node --version.
Walkthrough: build the MCP server
Get API credentials from Barefoot
This is the only step you cannot do alone. The web service authenticates every call with three values: a username, a password, and a barefootAccount string, and those come from Barefoot, not from a signup form.
- If you already have a website or channel integration running on the API, your web developer or integration partner likely has these credentials already. Ask them first.
- Otherwise, ask your Barefoot account contact for web service credentials. For API and integration questions Barefoot publishes 877-799-1110 Ext. 3 and
sales@barefoot.comas the contact points.
Tell them what you want: read access to the BarefootService web service for internal reporting. Working with Barefoot directly here is the right move anyway; they know which operations are enabled for your account.
Set up the Node.js project
Three dependencies: the MCP SDK, zod for input validation, and fast-xml-parser because Barefoot answers in XML and Claude works better with JSON.
mkdir barefoot-mcp
cd barefoot-mcp
npm init -y
npm install @modelcontextprotocol/sdk zod fast-xml-parser
Add "type": "module" to package.json:
{
"name": "barefoot-mcp",
"version": "1.0.0",
"type": "module",
"main": "index.js",
"dependencies": {
"@modelcontextprotocol/sdk": "^1.0.0",
"fast-xml-parser": "^4.4.0",
"zod": "^3.22.0"
}
}
Create the MCP server file
Save the following as index.js. It builds a SOAP 1.1 envelope for each call, posts it to BarefootService.asmx with the right SOAPAction header, and parses the XML response. Three tools: get-all-properties, get-availability-by-date, and a generic call-barefoot-operation for any other read operation listed on the service page.
#!/usr/bin/env node
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { XMLParser } from "fast-xml-parser";
import { z } from "zod";
const USERNAME = process.env.BAREFOOT_USERNAME;
const PASSWORD = process.env.BAREFOOT_PASSWORD;
const ACCOUNT = process.env.BAREFOOT_ACCOUNT;
const ENDPOINT =
"https://portals.barefoot.com/barefootwebservice/BarefootService.asmx";
const NS = "http://www.barefoot.com/Services/";
if (!USERNAME || !PASSWORD || !ACCOUNT) {
console.error(
"Missing BAREFOOT_USERNAME, BAREFOOT_PASSWORD, or BAREFOOT_ACCOUNT"
);
process.exit(1);
}
const parser = new XMLParser({ ignoreAttributes: false });
function escapeXml(value) {
return String(value)
.replaceAll("&", "&")
.replaceAll("<", "<")
.replaceAll(">", ">")
.replaceAll('"', """)
.replaceAll("'", "'");
}
async function callBarefoot(operation, params = {}) {
const fields = {
username: USERNAME,
password: PASSWORD,
barefootAccount: ACCOUNT,
...params,
};
const body = Object.entries(fields)
.map(([key, value]) => `<${key}>${escapeXml(value)}</${key}>`)
.join("");
const envelope =
`<?xml version="1.0" encoding="utf-8"?>` +
`<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">` +
`<soap:Body><${operation} xmlns="${NS}">${body}</${operation}>` +
`</soap:Body></soap:Envelope>`;
const response = await fetch(ENDPOINT, {
method: "POST",
headers: {
"Content-Type": "text/xml; charset=utf-8",
SOAPAction: `"${NS}${operation}"`,
},
body: envelope,
});
const text = await response.text();
if (!response.ok) {
throw new Error(`Barefoot API ${response.status}: ${text.slice(0, 500)}`);
}
// Parse the envelope; many operations return XML nested inside
// a <OperationName>Result string, so parse that too if present.
const parsed = parser.parse(text);
const resultKey = `${operation}Result`;
const resultNode = JSON.stringify(parsed).includes(resultKey)
? parsed["soap:Envelope"]?.["soap:Body"]?.[`${operation}Response`]?.[
resultKey
]
: null;
if (typeof resultNode === "string" && resultNode.trim().startsWith("<")) {
return parser.parse(resultNode);
}
return resultNode ?? parsed;
}
const server = new McpServer({
name: "barefoot",
version: "1.0.0",
});
// Tool 1: List all properties
server.tool(
"get-all-properties",
"List all properties in the Barefoot account via the GetAllProperty operation. Returns the full property list with IDs. Use this first to discover property IDs for other queries.",
{},
async () => {
const data = await callBarefoot("GetAllProperty");
return {
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
};
}
);
// Tool 2: Availability across a date range
server.tool(
"get-availability-by-date",
"Check which properties are available between two dates via the GetPropertyAvailabilityByDate operation.",
{
date1: z.string().describe("Start date, e.g. 2026-08-08"),
date2: z.string().describe("End date, e.g. 2026-08-15"),
weekly: z
.string()
.optional()
.describe("Weekly-rental flag if your account uses it, e.g. 'false'"),
},
async ({ date1, date2, weekly }) => {
const data = await callBarefoot("GetPropertyAvailabilityByDate", {
date1,
date2,
weekly: weekly ?? "false",
});
return {
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
};
}
);
// Tool 3: Generic read operation
server.tool(
"call-barefoot-operation",
"Call any read-only Barefoot web service operation by name, e.g. GetPropertyDetails, GetPropertyRates, GetTenantList, GetOwners, GetGuestReservations. Credentials are added automatically. Check the operation's page at BarefootService.asmx for its exact parameter names. Never call write operations (PropertyBooking, UpdatePropertyPrice, CancelReservationDW, Add*/Set*/Remove*).",
{
operation: z
.string()
.describe("Operation name exactly as listed, e.g. GetPropertyRates"),
params: z
.record(z.string())
.optional()
.describe("Operation parameters as key-value strings"),
},
async ({ operation, params }) => {
if (!/^(Get|Is)/.test(operation)) {
throw new Error(
`Blocked: '${operation}' is not a read operation. This server only allows Get*/Is* calls.`
);
}
const data = await callBarefoot(operation, params ?? {});
return {
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
};
}
);
const transport = new StdioServerTransport();
await server.connect(transport);
Note the guard in the third tool: anything that doesn't start with Get or Is is refused, so Claude cannot reach the booking, pricing, or cancellation operations even by name.
Register the server with Claude Desktop
Open your Claude Desktop config file:
~/Library/Application Support/Claude/claude_desktop_config.json
%APPDATA%\Claude\claude_desktop_config.json
Add the Barefoot entry (merge it into your existing mcpServers block if you've set up other guides from this series):
{
"mcpServers": {
"barefoot": {
"command": "node",
"args": ["/absolute/path/to/barefoot-mcp/index.js"],
"env": {
"BAREFOOT_USERNAME": "your_web_service_username",
"BAREFOOT_PASSWORD": "your_web_service_password",
"BAREFOOT_ACCOUNT": "your_barefootAccount_string"
}
}
}
}
Replace the path and the three credential values with what Barefoot issued you. Then fully quit and reopen Claude Desktop.
Try it
Troubleshooting
The response says invalid login, or comes back empty
Barefoot's web service authenticates inside the SOAP body, so a bad credential often returns HTTP 200 with an error message or empty result rather than a 401. Double-check all three values, especially barefootAccount, which is a separate string from your username. If you copied credentials from a web developer's config, confirm they are for the web service, not an iLink or portal login.
HTTP 500 with a SOAP Fault
Usually a malformed request: a misspelled operation name, a missing required parameter, or a parameter name with wrong casing. Open BarefootService.asmx?op=OperationName in a browser; each operation's page shows the exact SOAP request with every parameter name. Match them exactly, ASMX services are case-sensitive on element names.
An operation returns nothing even with valid credentials
Not every operation is necessarily enabled for every account. Which data the web service returns depends on how Barefoot has configured your account. If a specific operation you need comes back empty, ask your Barefoot contact whether it is switched on for you; that is faster than debugging XML.
Claude says it doesn't see any Barefoot tools
Claude Desktop only reads the config file at startup. Fully quit Claude (Cmd+Q on macOS, right-click tray icon then Quit on Windows) and reopen it. Closing the window doesn't reload the config.
Still broken? Check Help, then Open Logs Folder for a startup error. Common causes: invalid JSON in the config file, wrong absolute path to index.js, or node not being in your PATH.
The parsed result is a giant blob of nested JSON
That's Barefoot's XML faithfully converted. Some operations return their payload as an XML string inside the ...Result element; the server already unwraps and re-parses that case. If a specific operation still comes back ugly, just tell Claude what you want from it ("pull out property ID, name, and bedrooms into a table"), turning messy structures into readable answers is the part Claude is good at.
FAQ
Yes. Barefoot maintains an open API alongside its iLink website connector, and the BarefootService web service publishes its operation list publicly at portals.barefoot.com. Barefoot's website integration page calls it "a well documented API that is open to other creative uses as well," with iLink positioned for smaller companies and the API for teams with technical staff or partners.
SOAP. BarefootService.asmx is a .NET ASMX web service; the operation pages show sample SOAP 1.1 and SOAP 1.2 requests and responses. Every operation authenticates with username, password, and barefootAccount parameters in the request body, and answers in XML, which is why the server in this guide includes an XML parser.
Not that we could find. As of July 2026 there is no Barefoot server in the Model Context Protocol registry or the community server lists, and Barefoot has not announced one. The 60-line server above is the working path today, and if Barefoot ships an official connector later, everything you learn asking Claude questions now carries straight over.
From Barefoot directly. There is no self-serve developer signup; ask your account contact, or use the contacts Barefoot publishes for API questions: 877-799-1110 Ext. 3 or sales@barefoot.com. If a web agency built your Barefoot-connected website, they may already hold web service credentials you can reuse.
No. The server only exposes read operations, and its generic tool refuses any operation name that doesn't start with Get or Is. Barefoot's web service does list write operations like PropertyBooking and UpdatePropertyPrice, but this guide deliberately keeps them out of Claude's reach. If you ever want writes, run them as a separate server so exploration stays safe.
Sources & references
- APIs and Partnerships, Barefoot online vacation rental softwarehttps://www.barefoot.com/barefoot-apis-and-partnerships
- Website Integration, Barefoot Vacation Rental Booking Software (iLink vs API)https://www.barefoot.com/website-integration
- BarefootService Web Service, live operation listinghttps://portals.barefoot.com/barefootwebservice/BarefootService.asmx
- What's the Deal with API's in the Vacation Rental Management Industry?, Barefoot bloghttps://www.barefoot.com/blog/whats-the-deal-with-apis-in-the-vacation-rental-management-industry
- Model Context Protocol TypeScript SDKhttps://github.com/modelcontextprotocol/typescript-sdk
- The PMS Generational Shift, RapidEye analysis of the VRMA member directoryhttps://rapideyeinspections.com/blog/vacation-rental-pms-generational-shift/
Other guides
This is one of a series on connecting the professional VR stack to Claude. Browse all the guides, or jump to a neighbor.
Connect Escapia to Claude
The other big legacy PMS for established professional managers.
PMSConnect Streamline to Claude
The number two PMS among VRMA member companies.
PMSConnect Track to Claude
Enterprise PMS with a modern REST API surface.
InspectionsThe RapidEye API
Pipe AI inspection results for your turnovers into the same Claude setup.

