Skip to main content
Glama
blackwaxxx

buildium-mcp

by blackwaxxx

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
BUILDIUM_RUN_LOGNoPath to the request audit log. Set to 'off' to disable. Default is platform state dir/run.log.
BUILDIUM_BASE_URLNoBase URL for the Buildium API. Required for production modes. Default is the sandbox URL.
BUILDIUM_ENV_FILENoPath to a .env file to load (optional).
BUILDIUM_CLIENT_IDYesBuildium client ID. Create an API key under Settings → Developer Tools.
BUILDIUM_STATE_DIRNoDirectory for state files such as run.log. Optional override.
BUILDIUM_CONFIG_DIRNoDirectory containing .env file (optional).
BUILDIUM_WRITE_MODENoWrite safety mode. One of: fixtures (default) or open.fixtures
BUILDIUM_ARTIFACT_LOGNoPath to created-records.log. Set to 'off' to disable.
BUILDIUM_CLIENT_SECRETYesBuildium client secret.
BUILDIUM_DEPLOYMENT_MODENoDeployment mode. One of: sandbox (default), production-readonly, production-readonly-files, production-write.sandbox

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
buildium_healthA

Report which Buildium environment this server is bound to (sandbox, production read-only, production read-only with file downloads, or production with writes), the active write mode, how many operations are indexed, and — if the server is not configured — exactly what to set.

Only needed before a WRITE, when the environment is genuinely in doubt, or when another tool reports a startup problem. Read-only questions do not require it.

Deliberately not wrapped by _guarded: this is the one tool that must answer when everything else cannot, so it reports status rather than raising.

buildium_list_tagsA

List every resource area in the Buildium API with its operation count (Leases, Work Orders, General Ledger, ...). Use this to orient before searching.

buildium_search_endpointsA

Find Buildium API endpoints by keyword.

Searches paths, summaries, tags, and operation IDs across all 462 operations. Start here when you don't already know the exact path.

query: natural keywords, e.g. "work orders", "lease transactions", "gl accounts" method: optionally restrict to get/post/put/patch/delete

buildium_describe_endpointA

Show the full contract for one endpoint: parameters, request body schema, and success response schema, with $refs resolved.

Call this before buildium_call_endpoint on anything non-trivial — especially writes, where the body schema tells you which fields are required.

buildium_describe_schemaA

Expand a named schema from the spec (e.g. "LeasePostMessage"). Useful when buildium_describe_endpoint hit its depth limit and emitted a bare $ref.

buildium_call_endpointA

Call any Buildium endpoint.

method: GET, POST, PUT, PATCH, or DELETE path: e.g. "/v1/leases" or "/v1/leases/12345" query: query-string parameters body: JSON request body for writes fields: keep only these top-level fields in the response. Buildium records are large — passing e.g. ["Id","Name","PropertyIds"] avoids pulling tax IDs and full addresses you did not ask for. confirm: required (true) for DELETE all_pages: GET only — follow pagination to the end instead of returning the first page. Use it whenever you are counting or aggregating; a count taken from one page is wrong whenever the collection is larger than the page.

Write guardrails apply — see buildium_health for the active mode. In the default 'fixtures' mode, created records must carry the fixture prefix in their name, and updates/deletes only work on records created this session.

buildium_created_fixturesA

List records created during this session, grouped by collection. These are the only records that updates and deletes are permitted against in 'fixtures' mode. Also appended to created-records.log (see buildium_health for the path) so they can be cleaned up after the process is gone.

buildium_upload_fileA

Upload a local file to Buildium, handling both steps of its upload flow.

Bytes do not travel through the Buildium API. Buildium issues a short-lived AWS presigned PUT URL, and the file is sent there directly. Doing that by hand with buildium_call_endpoint does not work — call_endpoint would post the metadata and hand you a URL it cannot then PUT to. Use this instead.

file_path: path to the file on this machine title: the file's title in Buildium. In 'fixtures' write mode this must start with the fixture prefix (see buildium_health). category_id: from GET /v1/files/categories — required, and Buildium rejects the upload without a real one. entity_type: what the file is attached to — Rental, Lease, Tenant, Vendor, Association, RentalOwner, RentalUnit, and so on. entity_id: the ID of that record. upload_path: for files belonging to a bill, check, or task history, pass that resource's own uploads path, e.g. "/v1/bills/123/files/uploads". Only Buildium's seven upload-request endpoints are accepted here, in every mode.

buildium_download_fileA

Download a Buildium file to this machine, handling both steps.

Buildium issues a download URL that expires after five minutes and serves the bytes from separate storage, so this cannot be done with buildium_call_endpoint.

Note this is refused when the server runs in production-readonly mode: Buildium models a download request as a POST, and that mode blocks every POST at the transport layer without exception. Reading file metadata via GET /v1/files/{id} still works.

file_id: from GET /v1/files save_to: where to write the file on this machine download_path: for a file belonging to a bill, check, or task history, that resource's own download path, e.g. "/v1/bills/123/files/456/downloadrequest". Only Buildium's seven download-request endpoints are accepted here, in every mode.

buildium_list_rentalsA

List rental properties. Pass fields to narrow large records.

Set all_pages=true to follow pagination to the end in one call — do that whenever you are counting or aggregating, since a single page is only the first 50 records and a count taken from it will be wrong.

buildium_get_rentalA

Get one rental property by ID.

buildium_list_unitsA

List rental units, optionally filtered to one property.

Set all_pages=true when counting or aggregating; one page is not the whole collection.

buildium_list_leasesA

List leases. lease_status is one of Active, Future, Past, Expired.

Each row already carries the rent terms under AccountDetails (including AccountDetails.Rent, the recurring monthly amount) and the lease dates. You do NOT need to open the transaction ledger to read a lease's rent — buildium_list_lease_transactions is for actual posted charges and payments, which is a different question.

For who is on each lease, use buildium_lease_roster.

Set all_pages=true when counting or aggregating across every lease.

buildium_get_leaseA

Get one lease by ID, including tenants and rent terms.

buildium_list_lease_transactionsA

List financial transactions (posted charges and payments) for a lease.

For the lease's recurring rent amount use buildium_list_leases instead — it is already on every row under AccountDetails.Rent.

Set all_pages=true when totalling a ledger.

buildium_list_work_ordersA

List work orders (maintenance jobs).

Set all_pages=true when counting or aggregating.

buildium_list_tenantsB

List rental tenants.

Set all_pages=true when counting or aggregating.

buildium_lease_rosterA

Who is on which lease — the lease-to-tenant join, done in one call.

Use this for any "who lives in / who is on lease X" question, and for counting co-tenants.

Buildium makes this awkward: the lease list does not reliably populate tenant names, and the tenant endpoint has no lease filter — so answering it directly means pulling every lease one at a time. Tenant records do carry their lease membership, so this fetches them once and inverts the mapping locally.

lease_id: restrict to a single lease property_id: restrict to leases at one property exclude_fixtures: drop tenants created by test tooling (names starting with the fixture prefix — see buildium_health). This sandbox accumulates such records permanently, because Buildium offers DELETE on only 14 of its 462 operations. When any are present the response says so, so a count is never silently wrong.

buildium_list_gl_accountsA

List general ledger accounts. You need these IDs to post rent charges and other financial transactions.

Set all_pages=true when counting or aggregating.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.9/5.0

Scored across 19 tools

Disambiguation4/5

The convenience tools are carefully differentiated—list_leases, list_lease_transactions, and lease_roster each explicitly say when to use them—and the discovery tools occupy clear stages. The main overlap is buildium_call_endpoint, which can express any GET/list operation and could be selected instead of a typed wrapper, though the descriptions make the wrappers' specific conveniences clear.

Naming Consistency4/5

Nearly all tools follow the buildium_<verb>_<noun> pattern, mostly list_, get_, describe_, and search_. A few outliers—buildium_health, buildium_created_fixtures, and buildium_lease_roster—break the verb_noun convention, but these are minor and the overall naming is predictable.

Tool Count4/5

At 19 tools this is slightly above the typical sweet spot, but the count is justified: a generic endpoint-calling core, discovery/health tools, file transfer tools, and convenience wrappers for high-frequency Buildium entities. Each wrapper earns its place by simplifying pagination, schema depth, or join logic, so the set feels slightly large rather than bloated.

Completeness5/5

Because buildium_call_endpoint can reach all 462 Buildium API operations, and buildium_search_endpoints/buildium_describe_endpoint provide discovery and contract details, the server has no dead ends despite offering convenience wrappers for only common objects. Reads, writes, file upload/download, pagination, fixture tracking, and environment health are all covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues