cincsystems-mcp
First MCP server for the CINC Systems (HOA / community association management) REST API.50K+ communities, 6M+ doors, $11B+ annual payments processed.
CINC Systems is the leading US community-association-management (CAM / HOA / condo)platform. Management companies use it to run the back-office accounting, boardpackets, ACC (Architectural Control Committee) workflow, homeowner communications,vendor management, and aged-balance collections for the HOAs, condominiums,lifestyle communities, and high-rises they manage.
cincsystems-mcp exposes the CINC Systems V1 REST API as 13 MCP tools soClaude / Cursor / any MCP client can read and (for ACC and vendors) write toyour CINC account in plain English.
What this unlocks
- ACC triage: "Show me every pending ACC request in HOA 42, sorted bysubmission date."
- Aged balances report: "Who's 90+ days past due across all our HOAs?"
- Collections escalation: "Pull the flagged-collections list for HOA 88and draft a referral-to-attorney email for the top 3."
- Board packet drafting: "What charges were posted in HOA 142 lastquarter?"
- Document lookup: "Where are the CC&Rs for Cypress Run?"
- Vendor tracking: "List every vendor whose insurance is on file inHOA 42."
- Call log audit: "Show me this week's call log for HOA 42."
Quick start
pip install -e .
export CINC_SYSTEMS_API_KEY=<opaque-token>
export CINC_SYSTEMS_MGMT_ID=<integer>
export CINC_SYSTEMS_BASE_URL=https://<your-subdomain>.cincsys.com
cinc_systems_mcp
Or run it via mcp directly:
mcp run src/cinc_systems_mcp/server.py
Auth
CINC Systems V1 is per-tenant. Each management company has its own subdomainand its own mgmt_id integer. You need three values:
| Env var | What it is | Where to get it |
|---|---|---|
CINC_SYSTEMS_API_KEY |
Opaque API key (NOT Bearer-prefixed) | CINC UI -> Account -> API Settings |
CINC_SYSTEMS_MGMT_ID |
Per-tenant integer (e.g. 1234) |
CINC UI -> top-right menu -> API Settings |
CINC_SYSTEMS_BASE_URL |
Per-tenant base URL (e.g. https://acme.cincsys.com) |
The URL you log in to |
The V1 API uses a plain Authorization: <api_key> header. CINC's V1 serverrejects Bearer -prefixed tokens; this client uses the opaque-token form.
Tools
13 tools total. All read the CINC account scoped to your mgmt_id.
Diagnostic
health_check— verify the API key, mgmt_id, and base URL are all valid
Associations
list_associations(assoc_code=None)— list all HOAs/condos you manageget_association(assoc_code)— get one HOA by its code
Homeowners
list_homeowners(assoc_code=None, last_name=None)— list homeownersget_homeowner(homeowner_id)— get one homeowner by ID
ACC (Architectural Control Committee)
list_acc(assoc_code=None, status=None)— list architectural review requestscreate_acc(body)— log a new ACC request (e.g. paint, fence, addition)
Vendors
list_vendors(assoc_code=None)— list contractors you useupdate_vendor(vendor_id, body)— update vendor record (insurance, contact)
Aged Balances
list_aged_balances(assoc_code=None)— delinquent accounts by 30/60/90+ day buckets
Call Logs
list_call_logs(assoc_code=None, days=None)— inbound/outbound HOA calls
Documents
list_documents(assoc_code=None, doc_type=None)— CC&Rs, bylaws, minutes, contracts
Flagged Collections
list_flagged_collections(assoc_code=None)— accounts escalated to attorney
Post Charges
list_post_charges(assoc_code=None, since=None)— recently posted assessments/fines/fees
Real workflow examples
Q: "Who in HOA 42 is 90+ days past due?"
Use list_aged_balances(assoc_code="HOA042") to pull the aging report.
The response is a list of records broken into 30/60/90+ day buckets.
Surface the 90+ bucket and the homeowner IDs in it.
Q: "What architectural requests came in this week?"
Call list_acc(assoc_code=None, status="pending") and filter to the
last 7 days on the assistant side. Each record has assocCode,
homeownerId, description, requestType, and submission timestamp.
Q: "Log a paint request for homeowner 9876 in HOA 42."
Call create_acc(body={
"assocCode": "HOA042",
"homeownerId": "9876",
"description": "Repaint front door navy blue",
"requestType": "paint"
}). The response is the new ACC record.
Architecture
Built on industry-leading Python patterns (see~/.mavis/agents/mavis/memory/engineering-playbook.md):
- Shared
httpx.AsyncClientwith connection pooling and transport-levelretries for transient network failures. - Typed exception hierarchy —
CincSystemsAuthError/NotFoundError/RateLimitError/APIError/ConnectionErrorwith structured fields(http_status,error_code,request_id,retry_after). - Application-level retry with exponential backoff + full jitter on 429and 5xx, honoring the
Retry-Afterheader. - Dispatch table for HTTP status -> exception (one row per status, nochained
if/raise). - isError-compliance — every tool
raises on failure so FastMCP setsisError=trueon the wire response (the Blackwell Systems MCP auditfound 9 of 25 default-input crashes + 11 silent-error patterns in popularMCPs; we don't repeat that mistake). - JSONL audit logging — every tool call writes a structured record tostderr (or a file via
CINC_SYSTEMS_AUDIT_LOG) with secret redaction. - respx + hypothesis tests — 25+ tests, ruff + mypy --strict clean.
Testing
pip install -e ".[dev]"
pytest # 25+ tests, no live API
ruff check src tests
ruff format --check src tests
mypy src
License
MIT.
Related MCPs
Other first-party MCPs in this series:
sanjibani/hawksoft-mcp— insurancesanjibani/open-dental-mcp— dentalsanjibani/ezyvet-mcp— veterinarysanjibani/jobber-mcp— home servicesanjibani/practicepanther-mcp— legal practicesanjibani/cox-automotive-mcp— auto dealershipsanjibani/qualia-mcp— title and escrowsanjibani/realm-mp-mcp— church / nonprofitsanjibani/fieldroutes-mcp— pest control / lawn caresanjibani/campspot-mcp— outdoor hospitalitysanjibani/cleancloud-mcp— laundry / dry cleaningsanjibani/playmetrics-mcp— youth sportssanjibani/foreup-mcp— golf course managementsanjibani/storedge-mcp— self-storagesanjibani/courtreserve-mcp— racquet sportssanjibani/procare-mcp— child caresanjibani/passare-mcp— deathcare / funeralsanjibani/funraise-mcp— nonprofit fundraisingsanjibani/kicksite-mcp— martial artssanjibani/singleops-mcp— green industry
Browse the full list at https://github.com/sanjibani?q=-mcp.
For custom MCP engagements, see https://sanjibani.github.io/mcp-services/.