workiva-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| WORKIVA_PROFILE | No | Profile name to use from the credentials file (default profile chosen by precedence). | |
| WORKIVA_CLIENT_ID | No | Client ID for the Workiva API (used if no credentials file). | |
| WORKIVA_KB_DRAFTS | No | Directory for storing KB drafts (default: ~/.workiva/kb/drafts/). | |
| WORKIVA_ALLOW_WRITES | No | Set to '1' to enable write operations (default: read-only). | |
| WORKIVA_CLIENT_SECRET | No | Client Secret for the Workiva API (used if no credentials file). | |
| WORKIVA_CREDENTIALS_FILE | No | Path to the credentials file (default: ~/.workiva/credentials). |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| kb_searchA | Search accumulated Workiva API knowledge BEFORE attempting unfamiliar work, and whenever a call fails unexpectedly. Pass the literal error text if you have one — entries are indexed on symptom strings. Otherwise pass the task ("create incoming connection", "write to spreadsheet"). Answers: is this possible via the API at all, what is the real endpoint, what will fail first. |
| kb_listA | List KB entries, optionally filtered by surface (wdata, platform, graph, spreadsheets, chains, auth) or severity (blocker, gotcha, nuance). Reading all blocker entries before planning Workiva work is cheap and prevents committing to approaches that have no API path. |
| kb_getA | Retrieve one KB entry in full, including its evidence. |
| kb_addA | Record a newly discovered Workiva quirk so nobody researches it twice. Add an entry whenever you lost more than a few minutes to something not obvious from the docs — especially "there is no API for this". entry_id stable kebab-case slug, e.g. wdata-upload-requires-zip severity blocker (no API path) | gotcha (obvious approach fails) | nuance symptom pipe-separated literal error strings — the primary search key; required for blockers and gotchas tags comma-separated api_version pass the dated X-Version you ran against, if known The draft lands in ~/.workiva/kb/drafts/ — local to this machine, searchable immediately. A human later promotes it into the shared KB by PR. |
| wdata_list_tablesA | List Wdata tables: id, name, databaseId, lastUploaded — and sql_ref, the exact qualified reference SQL requires. Wdata SQL cannot reference tables by name (KB: wdata-sql-requires-qualified-table-refs). Copy sql_ref verbatim into your query: SELECT ... FROM AS "alias". The databaseId doubles as the workspace id in Spreadsheets UI URLs. |
| wdata_get_tableB | Full detail for one Wdata table, including its column schema. |
| wdata_list_queriesA | List saved Wdata queries with id, name and updated timestamp. |
| wdata_run_sqlA | Execute one-off Wdata SQL and return rows. Tables MUST be referenced by the sql_ref from wdata_list_tables — "databaseId"."tableId" AS "alias" — plain names do not resolve. The dialect is Trino. Mechanics: there is no ad-hoc SQL endpoint, so this creates a temporary saved query, runs it, downloads the CSV result, then deletes the temporary query. |
| wdata_run_saved_queryB | Execute a saved Wdata query by id (see wdata_list_queries) and return its rows. |
| wdata_list_connectionsA | List Wdata connections (live query -> spreadsheet links). A filter pair is REQUIRED — either (source_type, source_id) or (destination_type, destination_id), e.g. source_type "wdata_query" with a query id. Connections cannot be CREATED via the API (KB: connections-cannot-be-created-via-api) — only listed and refreshed. |
| wdata_create_tableA | WRITE. Create a Wdata table. columns_json: JSON array of {"name": ..., "type": ...} column dicts — valid types are catalogued in the KB (kb_get wdata-column-types). |
| wdata_upload_and_importA | WRITE. Upload a local .csv/.tsv/.json (or .zip of one) into a Wdata table and import it: upload -> import -> poll until settled, in one call (upload alone does NOT import — KB: wdata-upload-then-import-two-steps). Row-level import errors are surfaced if the import fails. Note the import adds system columns to the table, and re-uploading an identical filename 409s (KB: wdata-duplicate-filename-409). |
| wdata_refresh_connectionA | WRITE. Refresh an existing connection and wait for it to settle — this updates the destination spreadsheet's data in place. Find connection ids with wdata_list_connections. Connections can only be refreshed, never created, via the API. |
| graph_typesA | List all graph record type names available in this workspace. |
| graph_recordsA | Fetch graph records of one type (find names via graph_types). A type filter is mandatory — the API rejects an unfiltered listing (KB: graph-records-filter-required). Set expand_relationships to walk the record's edges. |
| graph_editsA | WRITE. Apply graph edits: a JSON array of operations — create_record, create_relationship, set_properties, delete_relationship, delete_record. Records are created via edits; there is no POST /graph/records (KB: graph-records-created-via-edits). WARNING: if the response carries no temp-id map, do NOT retry — the records were likely created anyway. Read back with graph_records and reconcile (KB: graph-edits-id-map-unreliable). |
| spreadsheet_list_sheetsB | List sheets in a spreadsheet, including any bound dataset. |
| spreadsheet_updateA | WRITE. Write to a sheet. operations_json is one of editRange, editCells, applyFormats or resizeColumns; all indices 0-based and inclusive. Send numbers as JSON numbers, not strings, or CURRENCY/PERCENT formats will not apply (KB: spreadsheet-write-operations). Waits for the async operation to complete. |
| spreadsheet_ui_urlA | Build the Spreadsheets UI URL for a spreadsheet or sheet. No API returns this URL, but the query-result export endpoint and human users both need it; it is constructed from the workspace id (KB: spreadsheet-ui-url-format). Defaults to the first sheet. |
| workiva_requestA | Escape hatch for any endpoint not wrapped by a dedicated tool (tags, parameters, pivot views, folders, file downloads, admin, ...). surface — which host the path is relative to (KB: three-distinct-api-hosts): platform https://api.app.wdesk.com (X-Version added for you) wdata https://h.app.wdesk.com/s/wdata/prep/api/v1 chains https://h.app.wdesk.com/s/wdata/oc/api/v1 body_json / params_json are JSON strings. GET is always allowed; any other method counts as a WRITE here and requires writes enabled (read-style POSTs like query execution have dedicated tools that stay available). If a call fails in a way no KB entry explains, that is new knowledge — record it with kb_add. |
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 20 tools
Each tool targets a distinct operation within its domain (KB, Wdata, Graph, Spreadsheets, general request). No two tools overlap in purpose; the knowledge base tools are clearly differentiated from data operations, and the escape hatch covers anything not wrapped.
Names follow domain-specific prefixes (kb_, wdata_, graph_, spreadsheet_) with verb_noun patterns mostly, though some graph tools use plain nouns (graph_types) and the escape hatch uses workiva_request. Minor inconsistency across groups but still predictable.
20 tools is well-scoped for the Workiva API surface, covering multiple sub-APIs without being overwhelming. Each tool serves a clear purpose, and the count feels balanced.
Covers core workflows: KB management, Wdata CRUD and SQL, graph operations, spreadsheet updates, and a general escape hatch. Missing direct spreadsheet creation and some admin operations, but the escape hatch fills gaps effectively.