TrackVia MCP

Talk to TrackVia from any LLM.

A Model Context Protocol server that exposes your TrackVia account — apps, views, records, and files — plus a rich library of higher-level helpers for query, workflow, import, dedupe, aggregation, state machines, and lifecycle — for any MCP-aware assistant.

2 tools Streamable HTTP Bring-your-own token

What it does

Point an MCP-aware client at the server, pass through a TrackVia access token, and your model can work directly against your TrackVia apps.

Apps

List apps, look up by name, or fetch a single app by id.

Users

List account users, create one, bulk-invite many, or batch-resolve by email.

Views

List views, filter by name, page through records, run keyword search.

Records

Read, create (single or batch), update, or delete records — including bulk delete within a view.

Files

Download, upload, or delete files attached to record fields.

Inspect

Annotate a view, record, or whole account with field metadata; export an app's full schema.

Query

Filter, sort, select, and export records — evaluated inside the MCP server. Fan-out search across every view.

Workflows

Upsert by a unique field, or bulk-update / bulk-delete by filter (with preview, backup, and safety confirm).

Compose

Duplicate records, copy between views, and expand relationships inline.

Resolver

Turn human names (view, field, user) into the right ids.

Discovery

Locate fields across views and walk a relationship graph around any record.

Profile

Find and merge duplicates, and surface records missing required fields.

Ingest

Dry-run or execute CSV / JSON imports with casting and optional upsert.

Aggregation

Group-by, pivot, trend, and top-N — computed client-side over paginated records with bounded scans.

State machines

Status-field transitions with optimistic-concurrency checks, plus a bulk "advance workflow" variant.

Lifecycle

Soft-delete and restore patterns that flip an archive field instead of destroying data.

Server

Inventory every registered tool with version and status — useful for discovery from the model.

Install

The server speaks MCP over streamable HTTP at the /mcp endpoint. Every MCP request must carry a TrackVia access token (see Configure). Other MCP clients should work too, but Claude Code is the only one we currently document.

  1. Install the Claude Code CLI.
  2. Register the server with your TrackVia access token:
claude mcp add --transport http trackvia https://k8s-qa4.qa.xvia.com/mcp/mcp \
  --header "Authorization: Bearer YOUR_TRACKVIA_ACCESS_TOKEN"

Optional: pin a specific TrackVia host (defaults to the server's configured host) and/or target a sandbox account inside that account:

claude mcp add --transport http trackvia https://k8s-qa4.qa.xvia.com/mcp/mcp \
  --header "Authorization: Bearer YOUR_TRACKVIA_ACCESS_TOKEN" \
  --header "X-TrackVia-Host: qa1.qa.xvia.com" \
  --header "X-TrackVia-Account-Id: 12345"

Verify with claude mcp list — TrackVia should appear as connected.

Configure

Headers your MCP client passes through on every request. The client sets them for you once you paste the values in at install time.

Header Required Purpose
Authorization Yes TrackVia OAuth access token, as Bearer <token>.
X-TrackVia-Host Optional Override the upstream TrackVia host this request targets — e.g. qa1.qa.xvia.com. Falls back to the default host https://go.trackvia.com. Must match the hardcoded allowlist: *.trackvia.com, *.xvia.com, or localhost.
X-TrackVia-Account-Id Optional Target a sandbox account id inside the account implied by the access token. Must be a positive integer. Omit to use the access token's default account.

Tools reference

Every tool the server registers at startup.

Group Tool Description
BootstrapwhoAmIReturns the session's cached AccountContext: {userId, email, defaultAccountId, accounts: [...]}.
serverCapabilitiesReturns `{name, version, tools: [{name, since, status, replacedBy?}]}` — the authoritative list of what this server exposes and how stable each tool is.

FAQ

Where do I get a TrackVia access token?

From your TrackVia account — exchange your API user credentials for a short-lived OAuth access token through TrackVia's OAuth flow. Refer to the TrackVia API docs for the exact steps; this server does not issue tokens.

Are my credentials stored anywhere?

No. Access tokens are extracted from request headers, used for the outbound TrackVia call, and discarded. The logger redacts credential fields rather than writing them.

When should I set X-TrackVia-Host?

Only when you need to point this request at a non-default TrackVia environment — e.g. qa1.qa.xvia.com while developing against QA. The host must match the hardcoded allowlist: *.trackvia.com, *.xvia.com, or localhost. Omit the header to use the server's default host.

When should I set X-TrackVia-Account-Id?

Only when you want to target a sandbox account inside the account your access token belongs to. Pass the sandbox's numeric account id; omit the header to use the access token's default account.

Usage examples

Once connected, ask your model in plain language. The server composes small tools into real workflows, so most of these are one sentence.

Getting oriented

I'm new to this account. Give me a one-shot orientation — apps, views, and a few sample fields per view — so I know what I'm working with.
Tell me which tools this server exposes, when each was introduced, and whether any are marked experimental or deprecated.

Finding things across the account

Search every view in the "Operations" app for the word "urgent" and show me the top hits per view.
Which views anywhere in the account have a field called "Priority"?

Reading a single record

Pull record 7421 from the "Orders" view with every field annotated — type, required, writable, and linked ids.
Upsert this lead into the "Leads" view, keying on Email — update if it exists, otherwise create.

Bulk changes with a safety net

Preview what would happen if I set Status="Archived" on every record in "Old Tickets" last updated before 2025-01-01. Don't write anything yet.
Back up every matching record first, then archive every "Inactive" contact in the "Contacts" view.

Imports

Here's a CSV of new leads. Dry-run the import first, using Email as the unique key, and tell me which rows would create vs. update vs. fail validation.
The dry run looks clean. Now actually run the import and upsert on Email.

Data quality

Find duplicate contacts in the "Contacts" view grouped by email, case-insensitive, with at least 2 matches per cluster.
Take this cluster of duplicate contacts, merge them into one — keep the oldest record and fill any empty fields from the others.
In the "Projects" view, show me every record that's missing any required field, annotated with which fields are missing.

Exploring relationships

Build a 3-deep graph around record 7421 in "Orders" — every parent, every child, every link.
Pull record 7421 from "Orders" and expand its Customer and Owner relationship fields inline.

Query & export

Export every "Active" deal as CSV with just Name, Amount, Stage, and CloseDate.
Page through the "Tickets" view filtered to Status="Open", sorted by Priority desc — return up to 5000 records.

Schema

Export the full schema of the "Operations" app so I can see every view, every field, every choice, and every relationship target in one JSON blob.
Describe the "Contacts" view — show me every field's type, requiredness, writability, and choices.

Aggregation & reporting

In "Orders", group by Status and show me the count and the sum of Amount per group.
Build a pivot of "Deals" with Stage across the rows and Region across the columns, averaging Amount.
Show me a month-by-month trend of new records created in "Leads" this year — bucket by CreatedAt.
Who are the top 10 customers by total order amount in "Orders"?

State machines & approvals

Move record 4412 from Status "Submitted" to "Approved" — only if it's still "Submitted" right now — and stamp ApprovedAt with the current timestamp.
For every "Expense Report" still sitting in "Pending Manager" assigned to user 88, advance Status to "Pending Finance".

Soft delete & lifecycle

Archive record 8890 in "Contacts" by setting Archived=true and ArchivedAt=now. Don't actually delete.
Restore record 8890 in "Contacts": Archived=false, clear ArchivedAt.

User administration

Invite these 20 users — pasted below as CSV — and tell me which rows failed and why. confirm: true.
Look up these emails in the account and return the user ids, plus any that didn't match.