AACFlow ships with 321 built-in tool services. That is enough for almost every workflow we have seen in the wild. Almost.
Enterprise customers always need one more endpoint — an internal billing API, a legacy SOAP wrapper, a hand-rolled webhook. Forcing them to file a feature request, wait a release cycle, and redeploy is not a product. It is a queue. AACFlow gives them a primitive instead: define the tool yourself, save it, your agents see it.
A Tool Is Three Things
A tool, from the agent's point of view, is three things and only three things:
- a name the LLM can pick from a list,
- a JSON schema describing parameters,
- a callable body that returns a structured result.
Every one of our 321 built-in services boils down to exactly that. So we exposed exactly that as a row in the database: customTools(id, userId, workspaceId, name, description, schema, code, createdAt, updatedAt). No service code generation. No file system. No deploy step. A custom tool is a record.
The schema is the contract. The code is the implementation. The database is the registry.



