pacer-mcp
An MCP server that exposes pacer/core API endpoints as native tools for Claude Code (and any other MCP-aware client). One binary, stdio transport, no fuss.
Install
macOS (Homebrew)
brew install STR-Consulting/tap/pacer-mcp
Windows (Scoop)
scoop bucket add pacer https://github.com/STR-Consulting/scoop-bucket
scoop install pacer-mcp
Non-programmer? See docs/windows-setup.md for a copy-paste prompt to hand to your AI assistant.
Linux (binary tarball)
For server/automation use. Replace <version> and pick amd64 or arm64:
curl -fsSL https://github.com/STR-Consulting/mcp/releases/latest/download/pacer-mcp_<version>_linux_amd64.tar.gz | tar -xz
sudo install pacer-mcp /usr/local/bin/
Or use the OCI image: ghcr.io/str-consulting/pacer-mcp:latest (linux/amd64 + linux/arm64).
From source
go install github.com/STR-Consulting/pacer-mcp@latest
Setup
Add to your MCP config (e.g. .mcp.json in your project or your Claude Code user config):
{
"mcpServers": {
"pacer": {
"command": "pacer-mcp",
"env": {
"PACER_CORE_URL": "https://portal.pacerrev.io",
"PACER_CORE_TOKEN": "pat_..."
}
}
}
}
| Env var | Description | Default |
|---|---|---|
PACER_CORE_URL | Base URL of the pacer/core app (PAT JSON API is mounted here) | https://portal.pacerrev.io |
PACER_CORE_TOKEN | Personal access token, format pat_... | (unset) |
Run health_check after install to confirm the server can reach core.
PATs are minted by a core admin via pacer pat create --user <email> --label <name>; they require an employee-or-higher role and are sent as Authorization: Bearer pat_....
Tools
Each tool's full description (caveats, when to use, args) is returned to the MCP client at registration time — agents see them at tool-selection time. The list below is a quick index.
Operational
| Tool | What it does |
|---|---|
health_check | Pings the Pacer API and reports config + reachability |
Portfolio fundamentals
| Tool | What it does |
|---|---|
list_briefable_portfolios | Enumerate active portfolios (optional q name filter) |
list_portfolio_teams | Bulk: notification team (RM/RD/Jon) for every portfolio |
get_portfolio_team | Notification team for a single portfolio |
list_portfolio_units | Unit roster: bedrooms, type, managed/active, location |
list_portfolio_reservations | Reservations in a date range (by check_in/check_out/booked_on) |
Performance
| Tool | What it does |
|---|---|
get_portfolio_pacing | Recent reservations w/ YoY rent/ADR/ABW/LOS + anomaly score |
get_portfolio_metrics_ytd | CY vs PY YTD: revenue, ADR, occupancy, RevPAR, LOS, count |
get_portfolio_market_metrics | One-month CY vs PY + market benchmark deltas; optional decomposition |
Guesty PMS
| Tool | What it does |
|---|---|
guesty_pricing_config | Per-unit pricing intent: base price, fees, min/max nights, factors, channel settings |
guesty_reservation_promotions | Channel-applied promos on reservations in a month (Airbnb, Vrbo, etc.) |
Client health
| Tool | What it does |
|---|---|
get_client_health_brief | Latest (or dated) sentiment brief for a portfolio |
upsert_client_health_brief | Log a lightweight sentiment brief (1-5 + stage + payload) |
list_client_health_briefs | Dashboard view: latest brief per portfolio as of a date |
get_client_health_scoring_config | Scoring weights, labels, and tier thresholds |
upsert_intel_brief | Publish a full intel brief (Postgres + ClickUp task + BigQuery mirror) |
KeyData
| Tool | What it does |
|---|---|
list_managed_keydata_units | Pacer-managed unit UUIDs for a KeyData customer account |
Not wrapped:
POST /portfolios/{p}/intel-brief/attachments(multipart binary upload). MCP has no natural multipart story.
Development
go build -o pacer-mcp .
go test ./...
golangci-lint run --fix ./...
Releases are automated — push a v* tag and GitHub Actions builds darwin-arm64, windows-amd64, and linux-{amd64,arm64} binaries (plus a ghcr.io/str-consulting/pacer-mcp OCI image), then updates the Homebrew tap and Scoop bucket and publishes to the MCP Registry.
License
MIT