rentec-direct-mcp
v0.2.0
Published
Model Context Protocol (MCP) server for the Rentec Direct API v3. Gives AI agents read and (confirmed) write access to your Rentec Direct property-management data.
Maintainers
Readme
Rentec Direct MCP Server
A Model Context Protocol (MCP) server that gives AI agents structured, local-first access to your Rentec Direct property-management data via the official Rentec Direct API v3.
It exposes 20 tools across properties, tenants, leads, owners, vendors, leases, transactions, accounting, work orders, messaging, files, and contact lookup — so an assistant like Claude can answer questions such as "Which properties are vacant?", "What's this tenant's balance?", or "List open work orders over $500" — and, with explicit confirmation, create vendors, leads, work orders, expenses, and more.
📚 Full documentation: https://thethirdswitch.github.io/Rentec-Direct-MCP-Server/
Why local-first?
Your Rentec Direct API key unlocks sensitive financial and tenant data. This server is designed to run on your own machine, next to the AI client that uses it:
- The API key is read from an environment variable in your client config — it is
never committed, never sent anywhere except
secure.rentecdirect.com. - File contents are exchanged through your local filesystem, not streamed through the model.
- Every write requires a second, explicit confirmation step (details below).
You do not need to host anything publicly. See Hosting & Distribution.
Quick start
1. Get an API key
In Rentec Direct: Settings → Utilities → API Keys. Create a key and grant only
the scopes you need (e.g. read:properties, write:work_orders). Read scopes enable
the GET-based tools; write scopes enable the write tools.
The API is a Rentec Labs feature and is rate-limited to 60 requests/minute.
2a. Run with npx (no clone)
Add this to your MCP client config (e.g. Claude Desktop's claude_desktop_config.json):
{
"mcpServers": {
"rentec-direct": {
"command": "npx",
"args": ["-y", "rentec-direct-mcp"],
"env": {
"RENTEC_API_KEY": "your-api-key-here"
}
}
}
}Restart your client. That's it.
2b. Run from a local build (self-hosted)
git clone https://github.com/TheThirdSwitch/Rentec-Direct-MCP-Server.git
cd Rentec-Direct-MCP-Server
npm install
npm run buildThen point your client at the built entry point:
{
"mcpServers": {
"rentec-direct": {
"command": "node",
"args": ["/absolute/path/to/Rentec-Direct-MCP-Server/dist/cli.js"],
"env": {
"RENTEC_API_KEY": "your-api-key-here"
}
}
}
}3. Verify your key
# Validates the key and prints a ready-to-paste config snippet.
RENTEC_API_KEY=your-key npx rentec-direct-mcp ping
# or, interactively (key is not echoed or stored):
npx rentec-direct-mcp loginConfiguration
All configuration is via environment variables, supplied in your client's env block.
| Variable | Required | Default | Description |
| --- | --- | --- | --- |
| RENTEC_API_KEY | yes | — | Your Rentec Direct API key. |
| RENTEC_API_BASE_URL | no | https://secure.rentecdirect.com/api/v3 | Override the API base URL. |
| RENTEC_READ_ONLY | no | false | Set true to disable all write tools entirely. |
| RENTEC_TOOLS | no | (all) | Comma-separated tool groups and/or profiles to load. Shrinks the always-on tool surface. See below. |
| RENTEC_LOG_LEVEL | no | info | error | warn | info | debug (logs go to stderr). |
For local development you may copy .env.example to .env, but never
commit a real key.
Loading a subset of tools (RENTEC_TOOLS)
By default all tool groups load. To reduce the context footprint (and improve the
assistant's tool-selection accuracy), set RENTEC_TOOLS to a comma-separated list of
groups and/or profiles — the union is loaded. An unknown value fails fast at startup
with the list of valid names.
- Groups:
properties,tenants,leads,owners,vendors,leases,transactions,accounting,workorders,messaging,files,lookup,context. - Profiles:
all(default) ·core(properties, tenants, owners, leases, transactions, workorders, lookup, context — the day-to-day read/operate set).
// e.g. a tenant-and-maintenance assistant
"env": { "RENTEC_API_KEY": "…", "RENTEC_TOOLS": "properties,tenants,workorders,context" }RENTEC_TOOLS composes with RENTEC_READ_ONLY: groups pick the domains, read-only
drops the write tools within them. Run rentec-direct-mcp list-tools to see every group
and its tools.
Writes & confirmation
Seven tools mutate data: rentec_create_vendor, rentec_create_lead,
rentec_create_expense, rentec_create_work_order, rentec_add_work_order_note,
rentec_record_message, and rentec_upload_file.
Each write is a two-step operation:
- The agent calls the tool with its arguments. The server validates the input, returns a human-readable preview of exactly what will happen, and makes no change.
- Only when the tool is called again with
"confirm": truedoes the server send the request to Rentec Direct.
This is in addition to whatever approval prompt your MCP host already shows. To remove
write capability altogether, set RENTEC_READ_ONLY=true. See
Writes & Confirmation.
CLI commands
rentec-direct-mcp serve # start the MCP server over stdio (default)
rentec-direct-mcp login # validate a key, print a config snippet (no storage)
rentec-direct-mcp ping # validate RENTEC_API_KEY against /ping
rentec-direct-mcp list-tools # list every tool and flag the writes
rentec-direct-mcp --version
rentec-direct-mcp --helpTools at a glance
Most reads are one tool per resource: omit id to list, provide id to fetch a
single record. Writes stay separate so each keeps its own confirmation preview.
| Area | Tools |
| --- | --- |
| Properties | rentec_properties |
| Tenants | rentec_tenants |
| Leads | rentec_leads, rentec_create_lead |
| Owners | rentec_owners |
| Vendors | rentec_vendors, rentec_create_vendor |
| Leases | rentec_leases |
| Transactions | rentec_transactions, rentec_create_expense |
| Accounting | rentec_accounting (resource: accounts | products | banks) |
| Work Orders | rentec_work_orders, rentec_create_work_order, rentec_add_work_order_note |
| Messaging | rentec_messages, rentec_record_message |
| Files | rentec_files, rentec_upload_file |
| Lookup | rentec_lookup (scope: all | tenant | owner | vendor | prospect) |
| Context (bundles) | rentec_get_tenant_context |
v0.2.0 renamed the read tools. The old
rentec_list_*/rentec_get_*pairs are consolidated into singleid-optional tools (e.g.rentec_list_tenants+rentec_get_tenant→rentec_tenants), the fiverentec_lookup_*tools collapsed intorentec_lookup, the six accounting tools intorentec_accounting, andrentec_pingmoved to the CLI only. No data is lost — everything is still reachable. Update any hard-coded tool names. See the Tool Reference.
Full parameter tables: Tool Reference.
Resources & prompts
Beyond tools, the server also exposes a small set of MCP resources and prompts for clients that support them (e.g. Claude Desktop):
- Resource
rentec://reference/enums— a read-only document of enum codes and their meanings (Work Order statuses, payment types, account types) plus the age/date filter syntax. Reading it lets an agent use exact codes the first time instead of guessing. - Prompts — named workflows that drive a reliable read-only sequence:
delinquency_review,owner_statement_summary,vacancy_report, andmaintenance_triage.
Development
npm install
npm run build # compile TypeScript -> dist/
npm test # run the Vitest suite
npm run lint # ESLint
npm run typecheck # tsc --noEmit
npm run docs:tools # regenerate docs/tools.md from the codeArchitecture, conventions, and how to add or update a tool when the API changes are documented in CLAUDE.md and the Architecture guide.
Hosting & distribution
This server is intended to be run locally by each user — there is no shared server to operate, and that is the recommended model because every user supplies their own key.
Three supported ways to get it:
npx rentec-direct-mcp— zero install, always current (once published to npm).- Clone +
npm run build— full control, runs entirely from your checkout. - GitHub Release — download a pinned, versioned tarball from
Releases and run
node dist/cli.js.
A remote/multi-tenant deployment is intentionally not provided: it would require brokering many users' API keys, which contradicts the local-first security model.
Keeping up with the API
The upstream spec lives at https://secure.rentecdirect.com/api/v3/docs/openapi.yaml.
The verbatim document is Rentec Direct's IP and is not committed here; the repo tracks
only a derived openapi-specs/fingerprint.json (version,
sha256, and a structural operation index). A scheduled
GitHub workflow fetches the live spec, diffs its
fingerprint against the committed one, and opens an issue when it changes. A set of
Claude Skills then helps detect the specific changes and apply them to
the server and docs. See
Maintaining the Server.
Disclaimer
This is an unofficial, community project and is not affiliated with or endorsed by Rentec Direct. Use of the Rentec Direct API is subject to Rentec Direct's terms. Licensed under MIT.
