Why this API is agent-friendly
Traditional building APIs require opaque UUIDs for every lookup. An AI agent can’t ask “what VAVs are in the Library?” without first discovering the Library’s UUID, then querying equipment by location ID. Tacit’s API eliminates this friction. An agent can:- Discover by name:
equipment(name: "AHU")finds equipment without UUIDs - Query across the graph:
points(locationName: "Tower East", equipmentIs: "VAV", is: "Temperature_Sensor")joins locations, equipment, and points in one request - Reason with class hierarchy:
is: "HVAC_Equipment"matches all subtypes without knowing the taxonomy - Trace relationships:
upstreamanddownstreamfollow equipment chains to find root causes
Multi-tenant scoping
Every root query requires asiteId parameter. Your agent should store this as configuration, as it scopes all queries to a specific site’s knowledge graph. See multi-tenant scoping.
Examples below omit
siteId for brevity. In practice, every root query includes it.Agent query patterns
Pattern 1: Discovery - “What’s in this building?”
An agent starts by understanding the building’s structure:Pattern 2: Cross-cutting search - “Find specific sensors”
The most powerful pattern for agents. Instead of chaining multiple queries with UUIDs, ask a single cross-cutting question:Pattern 3: Topology - “What feeds what?”
Trace the equipment chain to understand dependencies:Pattern 4: Diagnostics - “What’s the blast radius?”
Combine traversal with point queries for root cause analysis:Pattern 5: Property filtering - “Find by metadata”
Architecture
MCP server integration
The fastest path for Claude-based agents is connecting via MCP (Model Context Protocol). This gives Claude direct access to Tacit’s GraphQL API as a tool. See MCP server setup for configuration.Key advantages for AI agents
| Traditional API | Tacit GraphQL |
|---|---|
| Need UUID to query anything | Search by name: equipment(name: "AHU") |
| Multiple round-trips to join data | One cross-cutting query: points(locationName: "...", equipmentIs: "...", is: "...") |
| Must know exact equipment types | Semantic resolution: is: "HVAC_Equipment" matches all subtypes |
| Manual recursive calls for chains | Built-in traversal: upstream, downstream |
| Flat JSON blobs for properties | Structured: properties { name value unit } with hasProperty filtering |
