autotask-dwh-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HTTP_PORT | No | Port for optional HTTP transport | 3000 |
| TRANSPORT | No | stdio (production) or http (local testing) | stdio |
| MSSQL_HOST | No | SQL Server host, e.g. reports18.autotask.net | |
| MSSQL_PORT | No | TCP port | 1433 |
| MSSQL_USER | No | Read-only login | |
| MSSQL_DATABASE | No | Database, e.g. TF_000000_WH | |
| MSSQL_MAX_ROWS | No | Hard ceiling on returned rows | 500 |
| MSSQL_PASSWORD | No | Password | |
| MSSQL_QUERY_TIMEOUT | No | Per-query timeout, seconds | 30 |
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
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_viewsA | List the Autotask Data Warehouse views (read-only reporting views, all named wh_*) with their column counts. Use this FIRST to discover which view holds the data you need, then describe_view for its columns and query to read rows. Source is the live INFORMATION_SCHEMA; if the DB is unreachable it falls back to the bundled schema snapshot (the 'source' field says which). Trap: there is NO wh_ticket view - tickets live in wh_task with project_id IS NULL. Optional case-insensitive substring filter on the view name. See warehouse://guide for the data model and how to resolve *_id columns to names. |
| describe_viewA | Return the column names and SQL types of ONE warehouse view. Take the exact view name from list_views, and call this before writing a query so you only reference columns that exist. Source is the live INFORMATION_SCHEMA (bundled snapshot as fallback; the 'source' field says which). On an unknown or misspelled name it returns found=false plus the closest matching view names as suggestions - retry with one of those. Traps: wh_task holds BOTH tickets and project tasks (a ticket has project_id IS NULL); time is split across wh_time_item (header, carries task_id) and wh_time_subitem (the hours), joined on time_item_id. See warehouse://guide for the ID-resolution map that turns *_id columns into names. |
| queryA | Execute EXACTLY ONE read-only SQL statement against the Autotask Report Data Warehouse and return its columns and rows (structuredContent plus a compact text table). The statement MUST be a single SELECT or WITH (CTE) query. The read-only guard REJECTS everything else: INSERT, UPDATE, DELETE, MERGE, DROP, ALTER, CREATE, TRUNCATE, EXEC/EXECUTE, GRANT, REVOKE, SELECT ... INTO, stored/extended procedures (sp_/xp_), and any second statement (a statement-separating semicolon). Rows are hard-capped by max_rows (ceiling 500). READ the resource warehouse://guide before writing queries - this warehouse uses non-obvious names. Key traps: there is NO wh_ticket / wh_time_entry / wh_ticket_note view; tickets AND project tasks share wh_task, where a ticket has project_id IS NULL and a project task has project_id IS NOT NULL; join hours as wh_time_item.time_item_id = wh_time_subitem.time_item_id (task_id lives only on wh_time_item); money columns (wh_posted_overall, wh_billing_item) come back as decimal strings. Almost every *_id column is a foreign key: resolve the IDs that matter to human-readable names by JOINing the matching lookup view (see the 'ID RESOLUTION' map in warehouse://guide) and return names, not raw IDs, unless the user explicitly asks for IDs. If the result comes back with truncated=true it is INCOMPLETE (more rows matched than the cap) - narrow with WHERE/GROUP BY, aggregate, or raise max_rows; do not treat the returned count as the total. Data freshness: the warehouse is a DAILY full snapshot, not a live system - values can be up to a day old; for time-critical questions call last_load and state the load time, or use the live Autotask source instead of presenting a stale figure as current. For business terms (revenue, cost, margin, open ticket, billed/worked hours, utilization, active contract/employee) use the canonical definition from the BUSINESS GLOSSARY in warehouse://guide instead of interpreting them freely, and state the definition and time window you used. |
| last_loadA | Return the warehouse freshness markers from the special object warehouse_last_load (this object is NOT a wh_ view and does NOT appear in list_views). Last_Load is the timestamp the daily full reload finished - the only reliable 'data is fresh' signal; Backup_Taken is the point in time up to which the data is accurate. Use it to check how current the data is, and as the first smoke test after deploy. No parameters. The warehouse is only a DAILY snapshot, so for any time-critical question check this first and report the data's age (Last_Load) rather than presenting a possibly day-old value as current. See warehouse://guide for the overall data model. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| warehouse-guide | Domain notes for writing correct queries against the Autotask Report Data Warehouse (non-obvious view/column names, the measured ticket-vs-task rule, the time join key, financial views, and the UI->DWH terminology map). |
TDQS
Scored across 4 tools
Each tool targets a separate stage of the reporting workflow: discovering views, inspecting schema, checking freshness, and running read-only queries. There is no purpose overlap or ambiguity in choosing among them.
list_views and describe_view follow a clear verb_noun pattern, and query is a readable bare-verb action. last_load breaks the pattern as a noun phrase, so the set is mostly consistent but not perfectly uniform.
Four tools is well-scoped for a read-only warehouse access server: discovery, schema inspection, freshness check, and query execution cover the domain without redundancy or bloat.
The tool surface fully covers the core workflow for a reporting DWH: find the right view, inspect its columns, verify data freshness, and query it with a robust SQL guard. No obvious dead ends or missing operations for the stated read-only purpose.