Are you the author? Sign in to claim
AppFolio MCP server for Claude, Cursor, and AI agents: 137 reports + 156 Database API endpoints behind 6 catalog-backed
An MCP (Model Context Protocol) server for AppFolio Property Manager, connecting your property management data to AI tools.
bash (macOS/Linux):
APPFOLIO_VHOST="yourcompany"
APPFOLIO_CLIENT_ID="your-reports-client-id"
APPFOLIO_CLIENT_SECRET="your-reports-client-secret"
APPFOLIO_DB_DEVELOPER_ID="your-developer-id"
APPFOLIO_DB_CLIENT_ID="your-db-client-id"
APPFOLIO_DB_CLIENT_SECRET="your-db-client-secret"
claude mcp add appfolio \
--env APPFOLIO_VHOST="$APPFOLIO_VHOST" \
--env APPFOLIO_CLIENT_ID="$APPFOLIO_CLIENT_ID" \
--env APPFOLIO_CLIENT_SECRET="$APPFOLIO_CLIENT_SECRET" \
--env APPFOLIO_DB_DEVELOPER_ID="$APPFOLIO_DB_DEVELOPER_ID" \
--env APPFOLIO_DB_CLIENT_ID="$APPFOLIO_DB_CLIENT_ID" \
--env APPFOLIO_DB_CLIENT_SECRET="$APPFOLIO_DB_CLIENT_SECRET" \
-- npx -y @nightsquawktech/appfolio-mcp-server
PowerShell (Windows):
$APPFOLIO_VHOST = "yourcompany"
$APPFOLIO_CLIENT_ID = "your-reports-client-id"
$APPFOLIO_CLIENT_SECRET = "your-reports-client-secret"
$APPFOLIO_DB_DEVELOPER_ID = "your-developer-id"
$APPFOLIO_DB_CLIENT_ID = "your-db-client-id"
$APPFOLIO_DB_CLIENT_SECRET = "your-db-client-secret"
claude mcp add appfolio `
--env "APPFOLIO_VHOST=$APPFOLIO_VHOST" `
--env "APPFOLIO_CLIENT_ID=$APPFOLIO_CLIENT_ID" `
--env "APPFOLIO_CLIENT_SECRET=$APPFOLIO_CLIENT_SECRET" `
--env "APPFOLIO_DB_DEVELOPER_ID=$APPFOLIO_DB_DEVELOPER_ID" `
--env "APPFOLIO_DB_CLIENT_ID=$APPFOLIO_DB_CLIENT_ID" `
--env "APPFOLIO_DB_CLIENT_SECRET=$APPFOLIO_DB_CLIENT_SECRET" `
-- npx -y @nightsquawktech/appfolio-mcp-server
Or put the mcp.json block in .cursor/mcp.json, then verify with:
agent mcp list
(The Cursor CLI manages configured servers but has no mcp add; install is via the button or mcp.json.)
bash (macOS/Linux):
APPFOLIO_VHOST="yourcompany"
APPFOLIO_CLIENT_ID="your-reports-client-id"
APPFOLIO_CLIENT_SECRET="your-reports-client-secret"
APPFOLIO_DB_DEVELOPER_ID="your-developer-id"
APPFOLIO_DB_CLIENT_ID="your-db-client-id"
APPFOLIO_DB_CLIENT_SECRET="your-db-client-secret"
code --add-mcp '{"name":"appfolio","command":"npx","args":["-y","@nightsquawktech/appfolio-mcp-server"],"env":{"APPFOLIO_VHOST":"'"$APPFOLIO_VHOST"'","APPFOLIO_CLIENT_ID":"'"$APPFOLIO_CLIENT_ID"'","APPFOLIO_CLIENT_SECRET":"'"$APPFOLIO_CLIENT_SECRET"'","APPFOLIO_DB_DEVELOPER_ID":"'"$APPFOLIO_DB_DEVELOPER_ID"'","APPFOLIO_DB_CLIENT_ID":"'"$APPFOLIO_DB_CLIENT_ID"'","APPFOLIO_DB_CLIENT_SECRET":"'"$APPFOLIO_DB_CLIENT_SECRET"'"}}'
PowerShell (Windows):
$APPFOLIO_VHOST = "yourcompany"
$APPFOLIO_CLIENT_ID = "your-reports-client-id"
$APPFOLIO_CLIENT_SECRET = "your-reports-client-secret"
$APPFOLIO_DB_DEVELOPER_ID = "your-developer-id"
$APPFOLIO_DB_CLIENT_ID = "your-db-client-id"
$APPFOLIO_DB_CLIENT_SECRET = "your-db-client-secret"
$config = @{
name = "appfolio"
command = "npx"
args = @("-y", "@nightsquawktech/appfolio-mcp-server")
env = @{
APPFOLIO_VHOST = $APPFOLIO_VHOST
APPFOLIO_CLIENT_ID = $APPFOLIO_CLIENT_ID
APPFOLIO_CLIENT_SECRET = $APPFOLIO_CLIENT_SECRET
APPFOLIO_DB_DEVELOPER_ID = $APPFOLIO_DB_DEVELOPER_ID
APPFOLIO_DB_CLIENT_ID = $APPFOLIO_DB_CLIENT_ID
APPFOLIO_DB_CLIENT_SECRET = $APPFOLIO_DB_CLIENT_SECRET
}
} | ConvertTo-Json -Compress
code --add-mcp $config
bash (macOS/Linux):
APPFOLIO_VHOST="yourcompany"
APPFOLIO_CLIENT_ID="your-reports-client-id"
APPFOLIO_CLIENT_SECRET="your-reports-client-secret"
APPFOLIO_DB_DEVELOPER_ID="your-developer-id"
APPFOLIO_DB_CLIENT_ID="your-db-client-id"
APPFOLIO_DB_CLIENT_SECRET="your-db-client-secret"
codex mcp add appfolio \
--env APPFOLIO_VHOST="$APPFOLIO_VHOST" \
--env APPFOLIO_CLIENT_ID="$APPFOLIO_CLIENT_ID" \
--env APPFOLIO_CLIENT_SECRET="$APPFOLIO_CLIENT_SECRET" \
--env APPFOLIO_DB_DEVELOPER_ID="$APPFOLIO_DB_DEVELOPER_ID" \
--env APPFOLIO_DB_CLIENT_ID="$APPFOLIO_DB_CLIENT_ID" \
--env APPFOLIO_DB_CLIENT_SECRET="$APPFOLIO_DB_CLIENT_SECRET" \
-- npx -y @nightsquawktech/appfolio-mcp-server
PowerShell (Windows):
$APPFOLIO_VHOST = "yourcompany"
$APPFOLIO_CLIENT_ID = "your-reports-client-id"
$APPFOLIO_CLIENT_SECRET = "your-reports-client-secret"
$APPFOLIO_DB_DEVELOPER_ID = "your-developer-id"
$APPFOLIO_DB_CLIENT_ID = "your-db-client-id"
$APPFOLIO_DB_CLIENT_SECRET = "your-db-client-secret"
codex mcp add appfolio `
--env "APPFOLIO_VHOST=$APPFOLIO_VHOST" `
--env "APPFOLIO_CLIENT_ID=$APPFOLIO_CLIENT_ID" `
--env "APPFOLIO_CLIENT_SECRET=$APPFOLIO_CLIENT_SECRET" `
--env "APPFOLIO_DB_DEVELOPER_ID=$APPFOLIO_DB_DEVELOPER_ID" `
--env "APPFOLIO_DB_CLIENT_ID=$APPFOLIO_DB_CLIENT_ID" `
--env "APPFOLIO_DB_CLIENT_SECRET=$APPFOLIO_DB_CLIENT_SECRET" `
-- npx -y @nightsquawktech/appfolio-mcp-server
Or add it to ~/.codex/config.toml under [mcp_servers.appfolio].
Every environment variable the server reads, with recommended values:
{
"mcpServers": {
"appfolio": {
"command": "npx",
"args": ["-y", "@nightsquawktech/appfolio-mcp-server"],
"env": {
"APPFOLIO_VHOST": "yourcompany",
"APPFOLIO_CLIENT_ID": "your-reports-client-id",
"APPFOLIO_CLIENT_SECRET": "your-reports-client-secret",
"APPFOLIO_DB_DEVELOPER_ID": "your-developer-id",
"APPFOLIO_DB_CLIENT_ID": "your-db-client-id",
"APPFOLIO_DB_CLIENT_SECRET": "your-db-client-secret"
}
}
}
}
File locations: .mcp.json in your project root (Claude Code), claude_desktop_config.json (Claude Desktop), .cursor/mcp.json (Cursor).
The server talks to two AppFolio APIs, each with its own credentials. Configure one set or both: each API's tools only need their own variables, and the other API's tools return an error at call time if their variables are unset.
| Variable | Required | Default | Purpose |
|---|---|---|---|
APPFOLIO_VHOST | for Reports API tools | Your AppFolio database name, the subdomain in {vhost}.appfolio.com | |
APPFOLIO_CLIENT_ID | for Reports API tools | Reports API Client ID (Account Settings > Manage API Settings > Reports API Credentials) | |
APPFOLIO_CLIENT_SECRET | for Reports API tools | Reports API Client Secret | |
APPFOLIO_DB_DEVELOPER_ID | for Database API tools | Your AppFolio Developer ID (Admin > Developer ID) | |
APPFOLIO_DB_CLIENT_ID | for Database API tools | Database API Basic Auth Client ID (API Credentials > Basic Auth) | |
APPFOLIO_DB_CLIENT_SECRET | for Database API tools | Database API Basic Auth Client Secret |
AppFolio credentials: create dedicated API credentials for this server. Reports API credentials come from Account Settings > Manage API Settings > Reports API Credentials; Database API credentials are a Developer ID plus Basic Auth Client ID and Secret from API Credentials > Basic Auth.
list_reports, describe_report, run_report) are read-only: reports return data and never modify anything.call_endpoint executes reads and writes. Of the 156 endpoints, 58 are GET reads and 98 are write operations (55 POST, 33 PATCH, 4 PUT, 6 DELETE) that execute live against your AppFolio database. There is no environment write gate in this version.APPFOLIO_DB_* credentials, every call_endpoint request fails before reaching AppFolio.{vhost}.appfolio.com and api.appfolio.com; nothing passes through third parties.[!IMPORTANT] The tool surface is a guardrail, not a security boundary. The env vars in your MCP config are real AppFolio credentials, and an AI agent with shell access can bypass the MCP tools and call the AppFolio API directly with them. If you need hard read-only, enforce it at the source: scope the API credentials themselves, or only issue the read-oriented Reports API credentials and leave the Database API credentials out of the config.
Both APIs are catalog-backed: instead of one MCP tool per report or endpoint, each API exposes a list/describe/call triple built on mcp-core. list_* discovers what exists (137 reports, 156 endpoints), describe_* returns the full parameter spec for one entry from a local catalog, and the execute tool (run_report / call_endpoint) validates the request against that spec before calling AppFolio. Six tools cover 293 operations without flooding your client's tool list.
list_reports List the 137 AppFolio reports (slug, name, category, required filters)
describe_report Full parameter spec for one report: filters, types, enums, response columns
run_report Run a report and return its rows, auto-paginated
list_endpoints List the 156 Database API endpoints (operationId, method, path, category)
describe_endpoint Full spec for one endpoint: path params, filters, body schema, response fields
call_endpoint Call a Database API endpoint after validating it against the catalog
293 operations covered: 137 reports (Reports API v2) and 156 endpoints (Database API v0).
| Category | Operations |
|---|---|
| Reports: Association / HOA | 16 |
| Reports: Financial | 34 |
| Reports: Leasing | 16 |
| Reports: Maintenance & Workflow | 12 |
| Reports: Other | 2 |
| Reports: Owner | 6 |
| Reports: Property & Unit | 19 |
| Reports: Registers & Transactions | 9 |
| Reports: Rent Roll | 5 |
| Reports: Tenant | 13 |
| Reports: Vendor | 5 |
| Database API: Accounting | 30 |
| Database API: Community Associations | 12 |
| Database API: Corporate Accounting | 2 |
| Database API: Custom Fields | 1 |
| Database API: Leasing | 20 |
| Database API: Maintenance | 29 |
| Database API: People | 21 |
| Database API: Properties | 40 |
| Database API: System | 1 |
| Report | ID |
|---|---|
| Board of Directors | board_of_directors |
| Dues Roll | dues_roll |
| Dues Roll (Itemized) | dues_roll_itemized |
| Eligible Debt Summary | eligible_debt_summary |
| Fund Balance Sheet | fund_balance_sheet |
| Fund Balance Sheet - Active Funds | fund_balance_sheet_active_funds |
| Fund Income Statement | fund_income_statement |
| Homeowner Delinquency | homeowner_delinquency |
| Homeowner Delinquency (As Of) | homeowner_delinquency_as_of |
| Homeowner Directory | homeowner_directory |
| Homeowner Ledger | homeowner_ledger |
| Homeowner Prepayment Balance | homeowner_prepayment_balance |
| Homeowner Resale | homeowner_resale |
| Homeowner Vehicle Info | homeowner_vehicle_info |
| Insurance Enforcement | insurance_enforcement |
| Violation Detail | violation_detail |
| Report | ID |
|---|---|
| Account Totals | account_totals |
| Additional Fees | additional_fees |
| Aged Payables Summary | aged_payables_summary |
| Aged Receivable Detail | aged_receivables_detail |
| Annual Budget - Comparative | annual_budget_comparative |
| Annual Budget - Forecast | annual_budget_forecast |
| Balance Sheet | balance_sheet |
| Balance Sheet - Comparative | balance_sheet_comparative |
| Balance Sheet - Property Comparison | balance_sheet_comparison |
| Bank Account Association | bank_account_association |
| Budget - Comparative | budget_comparative |
| Budget - Property Comparison | budget_comparison |
| Cash Flow | cash_flow |
| Cash Flow - Property Comparison | cash_flow_comparison |
| Cash Flow Detail | cash_flow_detail |
| Chart of Accounts | chart_of_accounts |
| Email Delivery Errors | email_delivery_errors |
| Expense Distribution | expense_distribution |
| Fixed Assets | fixed_assets |
| General Ledger | general_ledger |
| Import Variances | import_variances |
| Income Statement | income_statement |
| Income Statement - Comparative | income_statement_comparative |
| Income Statement - Property Comparison | income_statement_comparison |
| Income Statement (Date Range) | income_statement_date_range |
| Insurance Usage | insurance_usage |
| Late Fee Policy Comparison | late_fee_policy_comparison |
| Loans | loans |
| Trial Balance | trial_balance |
| Trial Balance by Property | trial_balance_by_property |
| Trust Account Balance | trust_account_balance |
| Trust Account Detail | trust_account_balance_detail |
| Cash Flow - 12 Month | twelve_month_cash_flow |
| Income Statement - 12 Month | twelve_month_income_statement |
| Report | ID |
|---|---|
| Guest Card Inquiries | guest_card_inquiries |
| Guest Card Interests | guest_cards |
| Historical Advertised Rent | historical_advertised_rent |
| Inactive Guest Card Interests | inactive_guest_cards |
| Lease Expiration Detail By Month | lease_expiration_detail |
| Lease Expiration Summary By Month | lease_expiration_summary |
| Lease History | lease_history |
| Leasing Agent Performance | leasing_agent_performance |
| Leasing Funnel Performance | leasing_funnel_performance |
| Leasing Summary | leasing_summary |
| Prospect Source Tracking | prospect_source_tracking |
| Renewal Summary | renewal_summary |
| Rental Applications | rental_applications |
| Screening Assessments | screening_assessments |
| Screening Usage | screening_usage |
| Showings | showings |
| Report | ID |
|---|---|
| Association Work Order | association_work_order |
| Cancelled Workflows | cancelled_processes |
| Completed Workflows | completed_processes |
| Realm-X Flows Assigned Tasks | flows_assigned_tasks |
| In-Progress Workflows | in_progress_workflows |
| Inspection Detail | inspection_detail |
| Project Budget Detail | project_budget_detail |
| Project Directory | project_directory |
| Unit Inspection | unit_inspection |
| Activities Summary | upcoming_activities |
| Work Order | work_order |
| Work Order Labor Summary | work_order_labor_summary |
| Report | ID |
|---|---|
| Receivables Activity | receivables_activity |
| Survey Responses | surveys_summary |
| Report | ID |
|---|---|
| Owner Custom Fields | owner_custom_fields |
| Owner Directory | owner_directory |
| Owner Leasing | owner_leasing |
| Owner Withholdings | owner_withholdings |
| Owner 1099 Summary | owner1099 |
| Owner 1099 Detail | owner1099_detail |
| Report | ID |
|---|---|
| Amenities By Property | amenities_by_property |
| AppFolio Stack™ Usage | appfolio_stack_usage |
| Inventory Status | inventory_status |
| Inventory Usage | inventory_usage |
| Keys Detail | keys_detail |
| Occupancy Custom Fields | occupancy_custom_fields |
| Occupancy Summary | occupancy_summary |
| Premium Listing Billing Detail | premium_leads_billing_detail |
| Property Budget | property_budget |
| Property Custom Fields | property_custom_fields |
| Property Directory | property_directory |
| Property Group Directory | property_group_directory |
| Property Performance | property_performance |
| Property Staff Assignments | property_staff_assignments |
| Rentable Items | rentable_items |
| Unit Custom Fields | unit_custom_fields |
| Unit Directory | unit_directory |
| Unit Turn Detail | unit_turn_detail |
| Unit Vacancy Detail | unit_vacancy |
| Report | ID |
|---|---|
| Bill Detail | bill_detail |
| Charge Detail | charge_detail |
| Check Register | check_register |
| Check Register Detail (Enhanced) | check_register_detail |
| Deposit Register | deposit_register |
| Expense Register | expense_register |
| Income Register | income_register |
| Payment Plans | payment_plans |
| Purchase Order | purchase_order |
| Report | ID |
|---|---|
| Gross Potential Rent | gross_potential_rent_enhanced |
| Rent Roll | rent_roll |
| Rent Roll (Commercial) | rent_roll_commercial |
| Rent Roll (Itemized) | rent_roll_itemized |
| Rent Roll (By Bed) | student_housing_rent_roll_by_bed |
| Report | ID |
|---|---|
| Delinquency | delinquency |
| Delinquency (As Of) | delinquency_as_of |
| Renter Directory | renter_directory |
| Resident Financial Activity | resident_financial_activity |
| Security Deposit Funds Detail | security_deposit_funds_detail |
| Debt Collections Status | tenant_debt_collections_status |
| Tenant Directory | tenant_directory |
| Tenant Ledger | tenant_ledger |
| Tenant Tickler | tenant_tickler |
| Tenant Transactions Summary | tenant_transactions_summary |
| Tenant Unpaid Charges Summary | tenant_unpaid_charges_summary |
| Tenant Vehicle Info | tenant_vehicle_info |
| Unpaid Balances by Month | unpaid_balances_by_month |
| Report | ID |
|---|---|
| Vendor Custom Fields | vendor_custom_fields |
| Vendor Directory | vendor_directory |
| Vendor Ledger | vendor_ledger |
| Vendor Ledger (Enhanced) | vendor_ledger_enhanced |
| Vendor 1099 Summary | vendor1099 |
| Method | Path | Operation ID |
|---|---|---|
| GET | /bank_accounts | get_bank_accounts |
| POST | /bank_accounts/bulk | post_bank_accounts_bulk |
| GET | /bills | get_bills |
| POST | /bills | post_bills |
| PATCH | /bills/{billId} | patch_bills_billid |
| POST | /bills/{BillId}/attachments | post_bills_billid_attachments |
| POST | /bills/bulk | post_bills_bulk |
| POST | /bills/bulk/async | post_bills_bulk_async |
| GET | /charges | get_charges |
| POST | /charges | post_charges |
| POST | /charges/{ChargeId}/attachments | post_charges_chargeid_attachments |
| POST | /charges/bulk | post_charges_bulk |
| POST | /charges/bulk/async | post_charges_bulk_async |
| GET | /delinquent_charges | get_delinquent_charges |
| GET | /gl_accounts | get_gl_accounts |
| POST | /gl_accounts/bulk | post_gl_accounts_bulk |
| GET | /gl_details | get_gl_details |
| GET | /journal_entries | get_journal_entries |
| POST | /journal_entries | post_journal_entries |
| PATCH | /journal_entries/{JournalEntryId} | patch_journal_entries_journalentryid |
| POST | /journal_entries/{JournalEntryId}/attachments | post_journal_entries_journalentryid_attachments |
| POST | /journal_entries/bulk | post_journal_entries_bulk |
| GET | /late_fee_policies | get_late_fee_policies |
| POST | /late_fee_policies/bulk | post_late_fee_policies_bulk |
| GET | /payables | get_payables |
| GET | /recurring_charges | get_recurring_charges |
| POST | /recurring_charges | post_recurring_charges |
| PATCH | /recurring_charges/{recurringChargeId} | patch_recurring_charges_recurringchargeid |
| POST | /recurring_charges/bulk | post_recurring_charges_bulk |
| GET | /tenant_ledgers | get_tenant_ledgers |
| Method | Path | Operation ID |
|---|---|---|
| GET | /ca/associations | get_ca_associations |
| GET | /ca/bank_balances | get_ca_bank_balances |
| GET | /ca/board_members | get_ca_board_members |
| GET | /ca/homeowner_ledgers | get_ca_homeowner_ledgers |
| GET | /ca/homeowners | get_ca_homeowners |
| GET | /ca/renters | get_ca_renters |
| GET | /ca/rules | get_ca_rules |
| GET | /ca/units | get_ca_units |
| GET | /ca/violations | get_ca_violations |
| POST | /ca/violations | post_ca_violations |
| PATCH | /ca/violations/{violationId} | patch_ca_violations_violationid |
| POST | /ca/violations/{violationId}/attachments | post_ca_violations_violationid_attachments |
| Method | Path | Operation ID |
|---|---|---|
| GET | /corporate_entities | get_corporate_entities |
| POST | /corporate/gl_accounts/bulk | post_corporate_gl_accounts_bulk |
| Method | Path | Operation ID |
|---|---|---|
| GET | /custom_fields | get_custom_fields |
| Method | Path | Operation ID |
|---|---|---|
| GET | /leads | get_leads |
| POST | /leads | post_leads |
| POST | /leads/{GuestCardId}/notes | post_leads_guestcardid_notes |
| PATCH | /leads/{GuestCardId}/notes/{Id} | patch_leads_guestcardid_notes_id |
| PATCH | /leads/{leadId} | patch_leads_leadid |
| GET | /leads/notes | get_leads_notes |
| GET | /leases | get_leases |
| PATCH | /leases/{LeaseId} | patch_leases_leaseid |
| GET | /leases/renewal_pricings | get_leases_renewal_pricings |
| PUT | /leases/renewal_pricings/bulk | put_leases_renewal_pricings_bulk |
| GET | /listings | get_listings |
| GET | /rental_applications | get_rental_applications |
| PATCH | /rental_applications/{rentalApplicationId} | patch_rental_applications_rentalapplicationid |
| POST | /rental_applications/{RentalApplicationId}/attachments | post_rental_applications_rentalapplicationid_attachments |
| POST | /rental_applications/{RentalApplicationId}/notes | post_rental_applications_rentalapplicationid_notes |
| PATCH | /rental_applications/{RentalApplicationId}/notes/{Id} | patch_rental_applications_rentalapplicationid_notes_id |
| GET | /rental_applications/notes | get_rental_applications_notes |
| GET | /showings | get_showings |
| POST | /showings | post_showings |
| PATCH | /showings/{showingId} | patch_showings_showingid |
| Method | Path | Operation ID |
|---|---|---|
| POST | /inspections | post_inspections |
| DELETE | /inspections/{InspectionId} | delete_inspections_inspectionid |
| PATCH | /inspections/{InspectionId} | patch_inspections_inspectionid |
| POST | /inspections/{InspectionId}/attachments | post_inspections_inspectionid_attachments |
| POST | /inspections/bulk | post_inspections_bulk |
| GET | /inventories | get_inventories |
| POST | /inventories | post_inventories |
| DELETE | /inventories/{Id} | delete_inventories_id |
| PATCH | /inventories/{Id} | patch_inventories_id |
| POST | /inventories/bulk | post_inventories_bulk |
| GET | /inventory_locations | get_inventory_locations |
| POST | /inventory_locations | post_inventory_locations |
| PATCH | /inventory_locations/{Id} | patch_inventory_locations_id |
| POST | /inventory_locations/bulk | post_inventory_locations_bulk |
| GET | /vendors | get_vendors |
| POST | /vendors | post_vendors |
| PATCH | /vendors/{vendorId} | patch_vendors_vendorid |
| POST | /vendors/{VendorId}/notes | post_vendors_vendorid_notes |
| PATCH | /vendors/{VendorId}/notes/{Id} | patch_vendors_vendorid_notes_id |
| POST | /vendors/bulk | post_vendors_bulk |
| GET | /vendors/notes | get_vendors_notes |
| GET | /work_orders | get_work_orders |
| POST | /work_orders | post_work_orders |
| PATCH | /work_orders/{workOrderId} | patch_work_orders_workorderid |
| POST | /work_orders/{WorkOrderId}/attachments | post_work_orders_workorderid_attachments |
| DELETE | /work_orders/{WorkOrderId}/attachments/{AttachmentId} | delete_work_orders_workorderid_attachments_attachmentid |
| POST | /work_orders/{WorkOrderId}/notes | post_work_orders_workorderid_notes |
| PATCH | /work_orders/{WorkOrderId}/notes/{Id} | patch_work_orders_workorderid_notes_id |
| GET | /work_orders/attachments | get_work_orders_attachments |
| Method | Path | Operation ID |
|---|---|---|
| GET | /owner_groups | get_owner_groups |
| POST | /owner_groups | post_owner_groups |
| PATCH | /owner_groups/{id} | patch_owner_groups_id |
| GET | /owners | get_owners |
| POST | /owners | post_owners |
| GET | /owners/{ownerId} | get_owners_ownerid |
| PATCH | /owners/{ownerId} | patch_owners_ownerid |
| POST | /owners/{OwnerId}/attachments | post_owners_ownerid_attachments |
| POST | /owners/{OwnerId}/notes | post_owners_ownerid_notes |
| PATCH | /owners/{OwnerId}/notes/{Id} | patch_owners_ownerid_notes_id |
| GET | /owners/attachments | get_owners_attachments |
| POST | /owners/bulk | post_owners_bulk |
| GET | /owners/notes | get_owners_notes |
| GET | /tenants | get_tenants |
| PATCH | /tenants/{tenantId} | patch_tenants_tenantid |
| POST | /tenants/{TenantId}/notes | post_tenants_tenantid_notes |
| PATCH | /tenants/{TenantId}/notes/{Id} | patch_tenants_tenantid_notes_id |
| PATCH | /tenants/bulk | patch_tenants_bulk |
| POST | /tenants/bulk | post_tenants_bulk |
| GET | /tenants/notes | get_tenants_notes |
| GET | /users | get_users |
| Method | Path | Operation ID |
|---|---|---|
| POST | /occupancies/{OccupancyId}/attachments | post_occupancies_occupancyid_attachments |
| GET | /occupancies/documents | get_occupancies_documents |
| GET | /portfolios | get_portfolios |
| PATCH | /portfolios/{portfolioId} | patch_portfolios_portfolioid |
| GET | /properties | get_properties |
| PATCH | /properties/{propertyId} | patch_properties_propertyid |
| POST | /properties/{PropertyId}/attachments | post_properties_propertyid_attachments |
| POST | /properties/{PropertyId}/marketing_photos | post_properties_propertyid_marketing_photos |
| DELETE | /properties/{PropertyId}/marketing_photos/{MarketingPhotoId} | delete_properties_propertyid_marketing_photos_marketingphotoid |
| PATCH | /properties/{PropertyId}/marketing_photos/{MarketingPhotoId} | patch_properties_propertyid_marketing_photos_marketingphotoid |
| POST | /properties/{PropertyId}/notes | post_properties_propertyid_notes |
| PATCH | /properties/{PropertyId}/notes/{Id} | patch_properties_propertyid_notes_id |
| POST | /properties/{PropertyId}/photos | post_properties_propertyid_photos |
| DELETE | /properties/{PropertyId}/photos/{PhotoId} | delete_properties_propertyid_photos_photoid |
| PATCH | /properties/{PropertyId}/photos/{PhotoId} | patch_properties_propertyid_photos_photoid |
| GET | /properties/attachments | get_properties_attachments |
| POST | /properties/bulk | post_properties_bulk |
| GET | /properties/marketing_photos | get_properties_marketing_photos |
| GET | /properties/notes | get_properties_notes |
| GET | /properties/photos | get_properties_photos |
| GET | /property_groups | get_property_groups |
| PATCH | /property_groups/{propertyGroupId} | patch_property_groups_propertygroupid |
| GET | /unit_types | get_unit_types |
| PATCH | /unit_types/{unitTypeId} | patch_unit_types_unittypeid |
| POST | /unit_types/bulk | post_unit_types_bulk |
| GET | /units | get_units |
| PATCH | /units/{unitId} | patch_units_unitid |
| POST | /units/{UnitId}/attachments | post_units_unitid_attachments |
| POST | /units/{UnitId}/notes | post_units_unitid_notes |
| PATCH | /units/{UnitId}/notes/{Id} | patch_units_unitid_notes_id |
| POST | /units/{UnitId}/photos | post_units_unitid_photos |
| DELETE | /units/{UnitId}/photos/{PhotoId} | delete_units_unitid_photos_photoid |
| PATCH | /units/{UnitId}/photos/{PhotoId} | patch_units_unitid_photos_photoid |
| PUT | /units/{UnitId}/pricing_matrices | put_units_unitid_pricing_matrices |
| GET | /units/attachments | get_units_attachments |
| POST | /units/bulk | post_units_bulk |
| GET | /units/notes | get_units_notes |
| GET | /units/photos | get_units_photos |
| PUT | /units/pricing_matrices/bulk | put_units_pricing_matrices_bulk |
| PUT | /units/pricing_matrices/bulk/async | put_units_pricing_matrices_bulk_async |
| Method | Path | Operation ID |
|---|---|---|
| GET | /jobs | get_jobs |
Contributions and issues are welcome. Please open an issue first before submitting a PR.
AGPL-3.0: free for personal and open-source use. Organizations that cannot comply with the AGPL can purchase a commercial license, and hosted/managed versions are available. See COMMERCIAL.md or contact hello@nightsquawk.tech.
For copyright concerns or takedown requests, contact hello@nightsquawk.tech.
Google's universal MCP server supporting PostgreSQL, MySQL, MongoDB, Redis, and 10+ databases
Official MongoDB integration — query collections, run aggregations, inspect schemas
Secure MCP server for MySQL database interaction, queries, and schema management
Run Claude Code as an MCP server so any agent can delegate coding tasks to it