Operational Ontology
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OO_AGENT | No | The name of the agent for MCP sessions. Over stdio all callers collapse into one actor; setting this names that actor. It is labeling, not authentication. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_customerA | Read Customer objects visible to this session. Filter the returned objects in client-side code, then pass selected IDs to pivot, set or aggregate tools. |
| get_customerA | Fetch a single Customer by primary key (id). |
| union_customerA | union two Customer sets, identified by primary keys and reloaded for this session. |
| intersect_customerC | intersect two Customer sets, identified by primary keys and reloaded for this session. |
| subtract_customerA | subtract two Customer sets, identified by primary keys and reloaded for this session. |
| aggregate_customerB | Count the selected Customer objects and optionally sum a numeric property. Omit group_by for one whole-set total (key: null, zero metrics for an empty set), or group by a property. Returns set and values; each row has a key, member pks and numeric metrics. Filter rows in client-side code and use their pks to continue exploring. |
| search_orderA | Read Order objects visible to this session. Filter the returned objects in client-side code, then pass selected IDs to pivot, set or aggregate tools. |
| get_orderA | Fetch a single Order by primary key (id). |
| union_orderB | union two Order sets, identified by primary keys and reloaded for this session. |
| intersect_orderB | intersect two Order sets, identified by primary keys and reloaded for this session. |
| subtract_orderC | subtract two Order sets, identified by primary keys and reloaded for this session. |
| aggregate_orderA | Count the selected Order objects and optionally sum a numeric property. Omit group_by for one whole-set total (key: null, zero metrics for an empty set), or group by a property. Returns set and values; each row has a key, member pks and numeric metrics. Filter rows in client-side code and use their pks to continue exploring. |
| search_productA | Read Product objects visible to this session. Filter the returned objects in client-side code, then pass selected IDs to pivot, set or aggregate tools. |
| get_productB | Fetch a single Product by primary key (id). |
| union_productA | union two Product sets, identified by primary keys and reloaded for this session. |
| intersect_productA | intersect two Product sets, identified by primary keys and reloaded for this session. |
| subtract_productB | subtract two Product sets, identified by primary keys and reloaded for this session. |
| aggregate_productA | Count the selected Product objects and optionally sum a numeric property. Omit group_by for one whole-set total (key: null, zero metrics for an empty set), or group by a property. Returns set and values; each row has a key, member pks and numeric metrics. Filter rows in client-side code and use their pks to continue exploring. |
| search_noteD | Read Note objects visible to this session. Filter the returned objects in client-side code, then pass selected IDs to pivot, set or aggregate tools. |
| get_noteA | Fetch a single Note by primary key (id). |
| union_noteC | union two Note sets, identified by primary keys and reloaded for this session. |
| intersect_noteC | intersect two Note sets, identified by primary keys and reloaded for this session. |
| subtract_noteB | subtract two Note sets, identified by primary keys and reloaded for this session. |
| aggregate_noteA | Count the selected Note objects and optionally sum a numeric property. Omit group_by for one whole-set total (key: null, zero metrics for an empty set), or group by a property. Returns set and values; each row has a key, member pks and numeric metrics. Filter rows in client-side code and use their pks to continue exploring. |
| traverse_customer_ordersA | Traverse the Customer → Order link "customerOrders" (one-to-many). Pass an instance returned by get or search; its properties are a snapshot, not authority. Direction is inferred from source.type; an explicit direction must agree. |
| traverse_order_productsA | Traverse the Order → Product link "orderProducts" (many-to-many). Pass an instance returned by get or search; its properties are a snapshot, not authority. Direction is inferred from source.type; an explicit direction must agree. |
| traverse_order_notesA | Traverse the Order → Note link "orderNotes" (one-to-many). Pass an instance returned by get or search; its properties are a snapshot, not authority. Direction is inferred from source.type; an explicit direction must agree. |
| pivot_customer_ordersC | Follow customerOrders from a set of Customer or Order. Duplicate target identities are removed. Direction is required when both ends have the same type. |
| pivot_order_productsC | Follow orderProducts from a set of Order or Product. Duplicate target identities are removed. Direction is required when both ends have the same type. |
| pivot_order_notesC | Follow orderNotes from a set of Order or Note. Duplicate target identities are removed. Direction is required when both ends have the same type. |
| cancel_orderA | Cancel an order. Shipped orders cannot be cancelled. Writes are gated: if a business rule rejects this call, the error is machine-readable ({ code, message }) and the attempt is recorded in the audit log. |
| assign_orderA | Assign a pending order to a person for fulfilment. Writes are gated: if a business rule rejects this call, the error is machine-readable ({ code, message }) and the attempt is recorded in the audit log. |
| add_order_noteB | File a triage note against an order. Writes are gated: if a business rule rejects this call, the error is machine-readable ({ code, message }) and the attempt is recorded in the audit log. |
| read_audit_logA | Read the append-only audit log: every applied and rejected action, with actor and params. This is an unscoped administrative view — entries are not filtered by visibility (fail-open, declared). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 34 tools
Most tools are cleanly separated by entity and operation; the search/get/union/intersect/subtract/aggregate families are unambiguous. The main confusion risk is between pivot_* and traverse_* tools, which cover the same relationships and differ only in set-input versus instance-input semantics.
All tool names follow a consistent lowercase snake_case verb_noun pattern, such as search_customer, get_order, union_product, and add_order_note. Even the pivot/traverse variants are valid imperative verb+object names, so the naming convention is highly regular.
34 tools is well above the comfortable range and feels inflated for four entity types and three relationships. Per-entity set operations, aggregation, and duplicate pivot/traverse variants add unnecessary surface area that could be consolidated.
The read/analysis surface is thorough: every entity has search, get, set operations, aggregation, and relationship traversal, with operational actions like cancel, assign, add note, and audit log access. However, there are notable lifecycle gaps such as no create/update/delete for core entities and no way to advance an order to shipped.