MCP tool registry for AssetAtlas chat orchestration layer. Wraps existing MCP tool implementations as async closures and registers them for chat-callable dispatch without going through the MCP server.
AssetAtlas exposes 48 tools with significant definition gaps. Most tools have descriptions (good), but parameter documentation is sparse and inconsistent. query_assets and run_chart have detailed schemas; most others lack visible input schemas or parameter descriptions. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) detected. Error handling guidance is absent. Tool naming is verb-forward (query_, get_, list_, run_) but many descriptions are terse (under 50 chars). Output schemas are not documented. This is a typical community server with functional tools but insufficient LLM-optimization.
Describe available asset catalog fields, their types, operators, and examples.
Export matching assets as CSV with full field selection and filtering.
Get detailed information for a specific alert.
Get historical data for an alert.
Retrieve alerts with filtering, sorting, and pagination.
Retrieve detailed information for a single asset by identifier (hostname, IP, MAC, serial, or asset ID).
Get asset categories and their metadata.
46 of 48 tools lack visible input schemas. Only query_assets, run_chart, and get_chatbot_usage have documented parameter schemas. This prevents LLMs from understanding valid inputs and forces guessing on parameter types, enums, and constraints.
Parameter descriptions are missing or generic across 40+ tools. Tools like get_asset, list_alerts_for_asset, and get_dashboard have only 40-char descriptions with no parameter guidance. LLMs cannot infer what 'identifier' accepts (hostname, IP, MAC, serial, asset ID) without explicit docs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 39 | 2026-07-28+ | v2 |
Get historical changes for an asset.
Get trend data for an asset over time.
Retrieve audit trail entries with filtering.
Get details for a specific integration sync batch.
Aggregated chatbot activity for the last N days. Returns text summary (totals, top users, token spend per provider/model, tool-call reliability, recent downvotes) plus a table artifact ranking tool calls by volume with computed error rate.
Get compliance posture matrix data.
Retrieve a dashboard configuration and data.
Get trend data for a dashboard metric.
Get the complete field registry with all available fields and their metadata.
Get diagnostic information for an integration.
Get field mapping configuration for an integration.
Get the sync schedule for an integration.
Get the current status of data processing pipelines.
Get compliance status for posture rules.
Get relationship graph data for assets.
Retrieve a stored report.
Get historical changes for a rule.
Get the status of the task scheduler.
Get system settings and configuration.
Get data source coverage statistics.
Retrieve metadata for a single unified field.
List alert rules with optional filtering.
List all alerts associated with a specific asset.
List available enrichment datasets.
List assets that are end-of-life or approaching end-of-life.
List sync batches for an integration.
List configured integrations.
List pipeline execution runs with filtering.
List posture/compliance rules.
List recent changes to assets.
List available reports.
List asset tagging/enrichment rules.
List tag rules with optional filtering.
List all unified fields with optional filtering.
Preview the effects of a rule without applying it.
Preview the output of a rule execution.
The primary tool for asset questions. One tool, three modes (set `mode`): - mode='list' — return matching asset rows (filters / search / sort, paged). `fields` picks the EXACT columns returned (any catalog field incl ext:/group:/tag:/posture/virtual); the user sees up to 100 rows in a table and can download the full set as CSV. - mode='aggregate' — server-side grouped counts (or SUM/AVG/MIN/MAX/COUNT_DISTINCT of `metric_field`) by `row_field` (+ optional `col_field` for a 2-D pivot). Use for 'how many / breakdown by / total of / average'. Far cheaper than paging list_assets. Each row/cell is drillable. - mode='field_values' — distinct values of one `field` with counts ('what locations exist?', 'which OS versions?'). Field names accept display ('OS Normalized'), snake ('os_normalized') or encoded ('static:Category') forms. Unknown fields/operators are rejected with a clear error — call describe_catalog / semantic_suggest to find the right name; never guess.
Query metrics data with filtering and aggregation.
Run analytics queries and generate charts (distribution, comparison, correlation, metric, trend).
Run a stored report configuration and return results.
Get semantic suggestions for fields, filters, and queries based on natural language.
No output schemas documented. Tools return data but LLMs have no way to know what fields to expect, what types they are, or how to chain results to downstream tools. This breaks tool composition and forces discovery calls.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. All 48 tools are marked READ_ONLY in metadata, but the MCP protocol annotations are absent. LLMs cannot distinguish safe reads from operations with side effects.
No error handling guidance. Tools lack descriptions of failure modes, recovery steps, or actionable error messages. If a query fails, the LLM has no guidance on whether to retry, adjust filters, or ask the user.