Symmetry Tax Engine MCP
The Symmetry Tax Engine (STE) Model Context Protocol (MCP) server connects STE's payroll tax calculation engine directly to the AI tools your team already uses. Ask questions in plain English — no JSON payloads, no developer tickets, no code required.
Supported clients: Claude Desktop, Cursor, Claude Code, Gemini CLI
Who is this for?
| Role | What you can do |
|---|---|
| Tax & compliance analysts | Validate jurisdiction rules and rate changes before they reach production |
| Customer support | Reproduce a client's paycheck calculation without waiting on engineering |
| Implementation & onboarding | Run parallel-payroll sanity checks during cutover |
| Payroll operations | Verify that an address maps to the correct local jurisdictions |
| Product managers | Prototype a new wage type, benefit, or election before writing a ticket |
Prerequisites
- An active STE license
- One of the supported AI clients installed (see below)
Choosing a client
All four options are free to download. If you're new to MCP tools and don't have a preference, Claude Desktop is the easiest starting point — it installs like any desktop app and requires no command line.
| Client | Best for | Download |
|---|---|---|
| Claude Desktop | Easiest setup; no technical experience needed | claude.ai/download |
| Cursor | Users who work in or alongside code | cursor.com/downloads |
| Claude Code | Terminal-comfortable users | Install guide |
| Gemini CLI | Users already in the Google ecosystem | github.com/google-gemini/gemini-cli |
Installation
Add the STE MCP server to your client of choice. The first time you invoke a tool, your browser will open and prompt you to log in with your Symmetry Client Support Center credentials.
Claude Desktop
- Open Claude Desktop and click Customize in the left sidebar.
- Select the Connectors tab.
- Click + (next to the search icon) at the top of the Connectors panel, then choose Add custom connector.
- Fill in the fields:
- Name:
ste - URL:
https://mcp.symmetry.com/ste - Leave OAuth Client ID and OAuth Client Secret blank.
- Name:
- Click Add.
- The
steconnector appears under Not connected, tagged CUSTOM. Select it and click Connect. - Your browser opens for Symmetry sign-in. After authenticating, return to Claude Desktop and start a new chat.
Cursor
Option A — Settings UI
- Press
Cmd+,(macOS) orCtrl+,(Windows/Linux) to open Settings. - Click MCP in the left sidebar, then Add MCP Server.
- Fill in:
- Name:
ste - URL:
https://mcp.symmetry.com/ste - Leave Transport on the default (Streamable HTTP).
- Name:
- Save. A green dot appears next to
steonce Cursor connects successfully.
Option B — Edit~/.cursor/mcp.json
If the file doesn't exist yet, create it. Add:
{
"mcpServers": {
"ste": {
"url": "https://mcp.symmetry.com/ste"
}
}
}
If you already have other MCP servers configured, add ste as a new key inside the existing mcpServers object — don't replace the whole file:
{
"mcpServers": {
"some-other-server": {
"url": "https://example.com/mcp"
},
"ste": {
"url": "https://mcp.symmetry.com/ste"
}
}
}
Save the file. Cursor picks up the change automatically — no restart needed.
Claude Code
Run this command in your terminal:
claude mcp add ste --transport http https://mcp.symmetry.com/ste --callback-port 33418
Why
--callback-port 33418? Symmetry's OAuth allowlist only accepts port 33418 as a redirect target. Claude Code picks a random ephemeral port by default, which causes aredirect_mismatcherror. Pinning the port fixes this. Cursor uses 33418 by default, so no flag is needed there.
After adding, restart Claude Code — MCPs are only loaded at startup.
Verify the server registered:
claude mcp list
You should see ste in the output.
Gemini CLI
Edit ~/.gemini/settings.json and add the following under mcpServers:
{
"mcpServers": {
"ste-mcp": {
"httpUrl": "https://mcp.symmetrydev.com/ste",
"oauth": {
"enabled": true,
"redirectUri": "http://localhost:33418/oauth/callback"
}
}
}
}
Always set
redirectUriexplicitly. If omitted, Gemini CLI may choose a random port that fails authentication.
Verify the connection
The quickest way to confirm everything is working is to ask your client:
use the ste mcp to get the ste version
The first time, your browser opens for Symmetry sign-in. After authenticating, your client returns a version string like:
2026.4.3.7-SNAPSHOT
Subsequent calls in the same session reuse the cached token — no more browser prompts.
Available tools
You never need to call these by name. Just describe what you need in plain English and the assistant picks the right one.
| Tool | What it does |
|---|---|
ste_get_version | Returns the STE engine version. Good first test to confirm your connection. |
ste_get_schema | Returns the JSON schema for STE requests and responses. |
ste_pay_calc | Calculates federal, state, and local payroll taxes for one or more employees. |
ste_gross_up | Given a net amount, computes the required gross and full tax breakdown. |
ste_jurisdiction_data | Returns filing-status options, allowance rules, and parameters for a given tax ID and pay date. |
ste_location_code | Resolves an address or coordinates to an STE GEO/location code, PSD, school district, and municipality. |
ste_location_tax | Returns all applicable taxes (federal through local) for a taxReferenceFull and effective date. |
ste_tax_id_list | Wildcard search over STE's reference catalogue of tax IDs, filterable by pay date and status. |
ste_set_tax_list | Returns the tax codes and parameters already applied to an employee setup. |
ste_benefit_info | Returns IRS/state benefit codes, tax treatment, combined limits, and catch-up amounts. |
ste_benefit_status | Returns active benefits, YTD usage, and effective contribution limits for a setup. |
Example prompts
Copy these directly into your AI assistant once connected.
Compliance analyst — validating a rate change
For pay date 2026-05-15, what taxes apply to location 42-003-1213644
(Pittsburgh, Allegheny)? I'm specifically looking for the Local Services
Tax and EIT rate so I can verify our internal table.
Customer support — debugging a wrong-number ticket
A client is reporting that the Ohio SUTA 2025 wage base isn't capping
at $9,000. Here's the payload from their ticket. Please replay it
through STE and walk me through where the cap should have applied.
Implementation lead — sanity-checking onboarding
Look up location codes for these three addresses [paste]. For each,
list the local taxes a new employee would face and tell me which ones
the employee can opt out of versus which are mandatory.
Product manager — prototyping a feature
Run the same $3,000 regular wage in PA, NY, and CA semi-monthly,
single, 1 exemption. Show me the federal + state + local totals
side by side so I can design the UI for our multi-state preview.
Tax operations — end-of-quarter parity check
For this employee with $87,500 YTD in PA and a $5,000 bonus paid
2026-06-30, calculate Supplemental flat method and compare to
combined-aggregation. I want to see the FICA + PA SIT + local difference.