Products & tools

At a glance: hdls is a portfolio of 37 headless SaaS backends — CRM, Support, Billing, Inventory, and more — that you operate entirely from your AI assistant over MCP. Connect once to the concierge to discover and install what you want, then connect your assistant to each product's own endpoint to call its purpose-built, named tools (create_account, search_accounts, summarize_account, …). Every product can be tailored with custom fields without ever touching the schema.

The flagship trio most workspaces start with is CRM, Support, and Contacts — but all 37 install the same way.

New here? Start with Getting connected to link your assistant, then come back to pick your products.

Looking for one product in depth? Every product has its own reference page — jump straight to it from the catalog below.

💬 Just ask

  • "What can hdls do? Show me the products I can turn on."
  • "Turn on the CRM and the helpdesk for my workspace."

You don't call these tools yourself — just tell your assistant; the technical reference below is for when you want the details.


The mental model

ConceptWhat it is
WorkspaceYour tenant. One isolated world of data.
ProductA backend you install into your workspace (CRM, Support, …). Each has a slug like crm.
ConciergeThe control plane at https://hdls.ai/api/mcp. Discover, install, invite, find skills.
Product endpointWhere you do the actual work: https://hdls.ai/api/mcp/<slug> (e.g. /api/mcp/crm).
Named toolsEach product exposes verbs you call directly — create_account, move_deal_stage, etc.

Two things are always true:

  1. You never pass a tenant_id. Your credential is pinned to one workspace, and isolation is enforced automatically by Postgres row-level security.
  2. Auth is one-click. Connect via OAuth 2.1 — no API keys to paste. (Scoped API keys exist for server-to-server jobs.) For more on how isolation and auth work, see Security & trust.

Roles

Actions are gated by your role: reader < member < admin < owner. Where a tool is admin- or owner-only, it's called out below. To add people and set their roles, see Teams.


Discovering products

You don't have to know slugs up front. Connect your assistant to the concierge at https://hdls.ai/api/mcp, then let it discover the catalog.

list_products — the whole catalog (any role)

Returns every product with its description, its named tools, its dedicated endpoint, and an installed flag for your workspace.

Tool: list_products
Arguments: {}

Each entry comes back like this:

{
  "slug": "crm",
  "name": "hdls CRM",
  "category": "Customer relationship management",
  "installed": true,
  "endpoint": "https://hdls.ai/api/mcp/crm",
  "tools": ["create_account", "search_accounts", "summarize_account", "..."]
}

That one call is your whole capability map — you can see what every product can do without connecting to any of them.

describe_product — one product in depth (any role)

Tool: describe_product
Arguments: { "slug": "crm" }

Returns the product's endpoint, installed flag, and a tools array of { name, description }, plus a how_to_use hint telling you whether you still need to install it.

install_product — enable it (admin/owner only)

Tool: install_product
Arguments: { "slug": "crm" }
  • Admin or owner only. Members and readers won't see this tool.
  • Idempotent — installing an already-installed product is a no-op.
  • Installing is instant: it records that your workspace uses the product, and its named tools become reachable at /api/mcp/<slug>.
  • Then connect. Point your MCP client at the product's endpoint (same OAuth, no new login) to actually call its tools. Installing does not add the product's tools to the concierge connection.

To remove a product later, uninstall_product({ "slug": "crm" })owner only. Uninstalling never deletes data; it just stops your workspace using the product.

💬 Just ask

  • "Install the CRM, then connect me to it so I can start adding accounts."
  • "Which products do I already have turned on?"

The catalog

hdls ships 37 products. Each links to its full reference page. list_products is always the authoritative, live source for what exists right now.

Customer & revenue

ProductSlugWhat it manages
hdls CRMcrmAccounts, contacts, deals, and activity timelines (replaces Salesforce, HubSpot)
hdls ContactscontactsDetailed people records with emails, phones, notes, and lists
hdls SuccesscsmAccounts, health scores, success plans, and touchpoints
hdls SupportsupportTickets, conversations, and a knowledge base (replaces Zendesk, Intercom)
hdls FeedbackfeedbackFeature requests, votes, and roadmap
hdls ReviewsreviewsReviews, ratings, and responses
hdls GivedonationsDonors, donations, and campaigns

Sales, contracts & finance

ProductSlugWhat it manages
hdls BillingbillingCustomers, subscriptions, and invoices
hdls ContractscontractsContracts, clauses, and signatures
hdls SignesignEnvelopes, signers, and signatures
hdls ProcureprocurementPurchase orders, vendors, and approvals
hdls ExpensesexpensesExpenses, reports, and approvals

Operations

ProductSlugWhat it manages
hdls InventoryinventoryItems, stock levels, and locations
hdls AssetsassetsAssets, assignments, and maintenance
hdls FleetfleetVehicles, maintenance, and inspections
hdls FieldfieldserviceJobs, technicians, and site visits
hdls SchedulingschedulingAvailability, event types, and bookings
hdls ITSMitsmIncidents, changes, problems, and CIs
hdls PIMpimProducts, attributes, and categories

People & teams

ProductSlugWhat it manages
hdls PeoplehrEmployees, time off, and org structure
hdls HireatsCandidates, jobs, and interview feedback
hdls LearnlmsCourses, lessons, and enrolments
hdls MembersmembershipsMembers, plans, and access
hdls GoalsokrsObjectives, key results, and check-ins
hdls TaskstasksTasks, projects, and comments
hdls TimetimetrackingTime entries, timesheets, and approvals
hdls ChatchatChannels, messages, members, and cross-org connections

Content & knowledge

ProductSlugWhat it manages
hdls ContentcmsContent entries, types, and assets
hdls DocsdocsPages, spaces, and links
hdls DrivedriveFolders, files, shares, and versions
hdls FormsformsForms, questions, and submissions
hdls BookmarksbookmarksFolders and saved links
hdls SkillsskillsFolders, skills, versions, and shares

Data, events & automation

ProductSlugWhat it manages
hdls AnalyticsanalyticsEvents, users, and funnels
hdls EventseventsEvents, streams, and webhooks
hdls WorkflowsworkflowsIf-this-then-that rules, actions, and run history

Governance

ProductSlugWhat it manages
hdls ComplycomplianceControls, evidence, and audits

The tool grammar (learn it once)

Every product's named tools follow the same verb_noun grammar, so once you know one product the rest read the same way:

PatternMeaning
create_<noun>Create a new record
update_<noun>Update an existing record by id
search_<nouns> / list_<nouns>Search by free-text and/or column filters (tenant-scoped, paginated)
move_<noun>_stageAdvance a record through its pipeline (sets stage)
log_activityAppend to the append-only activity timeline
summarize_<noun>Fetch a record plus its recent activity in one call

Products also add a few purpose-built verbs of their own — assign_asset, record_donation, request_signature, find_slots, and so on — listed in full on each product's reference page.

Worked example: the CRM

Install the CRM, connect to https://hdls.ai/api/mcp/crm, and create your first record. The headline entity is the account — create it first, then hang contacts and deals off it.

Tool: create_account
Arguments: { "name": "Northwind Traders", "domain": "northwind.example" }

You never pass an owner or tenant; those are stamped for you. For the full ten-tool walkthrough — updating, searching, moving a deal through its pipeline, logging activity, and reading it all back with summarize_account — see the hdls CRM reference.


Custom fields: tailor a product without changing its schema

Need a field hdls doesn't ship — say a renewal_likelihood score on accounts? Add it as a custom field. The value lives alongside the record under its data object; you set and read it through the normal record tools. No migration, no DDL.

These three tools are available on every product endpoint:

  • list_custom_fields (reader+) — see every team field plus your own personal fields.
  • add_custom_field (member+ for personal; admin+ for team) — define a field with a type of text | number | boolean | date | select. scope defaults to personal (only you see it).
  • promote_custom_field (admin/owner) — share a personal field with the whole workspace.

Set a custom field's value with a normal update_<noun> call:

Tool: update_account
Arguments: { "id": "<account-id>", "values": { "data": { "renewal_likelihood": 82 } } }

Gotcha: custom fields are a managed-platform feature. They're available on hdls-hosted products; a bring-your-own-database connection doesn't have them.

💬 Just ask

  • "Add a renewal_likelihood score to my accounts and set Northwind's to 82."
  • "What custom fields do we have on contacts?"

The generic engine (escape hatch)

The named product tools cover day-to-day work cleanly. When you need something lower-level — a raw query or an ad-hoc insert — a generic engine lives at the concierge endpoint https://hdls.ai/api/mcp as the low-level fallback. It exposes record-level tools such as:

ToolWhat it does
query_recordsQuery a table by free-text and/or filters
insert_recordInsert a row

Same automatic tenant isolation applies — you still never pass a tenant_id. Reach for these only when a named product tool doesn't fit; for normal work, the per-product tools are faster and self-describing. The product endpoints (/api/mcp/<slug>) deliberately do not expose these generic tools — they live only on the concierge endpoint.


Quick reference

You want to…Connect toCall
See every product and its tools…/api/mcp (concierge)list_products
Inspect one product in detail…/api/mcp (concierge)describe_product
Enable a product (admin/owner)…/api/mcp (concierge)install_product
Do CRM work…/api/mcp/crmcreate_account, search_accounts, move_deal_stage, summarize_account, …
Add your own fieldany …/api/mcp/<slug>add_custom_field
Invite a teammate…/api/mcp (concierge)invite_teammate
Raw query / insert (fallback)…/api/mcp (concierge)query_records, insert_record