Tray.ai · Claude Code plugin
Tray Toolkit
One-click setup that connects Claude Code to Tray.ai. Ask Claude to build, modify, and debug Tray workflows in natural language, no DevTools, no token pasting, no Terminal commands.
For developers · pro users
Already comfortable on the command line? Skip the wrapper and run Josh Noble's upstream bundle directly. It's the exact tarball he DM'd Jord; we mirror it here so the whole team has one URL to point at.
⬇ Download tray-internal-toolkit.tgz
Then in Terminal:
tar -xzf "$(ls -t ~/Downloads/tray-internal-toolkit*.tgz | head -1)" -C ~/ && ~/tray-internal-toolkit/install.sh
You'll be prompted for your Tray Workspace UUID and a Tray API token (DM the Automation team if you don't have one). The bundle's install.sh handles the plugin marketplace registration, the tray-logs + tray-build-assistant-public-no-feedback agents, and the @trayio/cdk-cli install. It's the same machinery the one-click installer above wraps, just exposed raw.
node_modules symlink fix and the user-scope claude mcp add workaround. If tray-workspace doesn't show up in claude mcp list after a Cmd-Q + relaunch, run the one-click installer instead, it includes both fixes.
What you get
Three things, installed and wired up automatically:
- The official Tray.ai Claude Code plugin (
tray-tools).A local MCP server with
validate_workflowthat runs after every change, plus the official skills (build-workflow,research-connector,tray-connectors,tray-patterns,tray-gotchas,set-workspace) and thetray-researcheragent. - Two helper agents in Claude Code.
tray-build-assistant-public-no-feedbackanswers "how do I do X in Tray?" by hitting Tray's public docs RAG.tray-logsfetches workflow executions to debug failures. - The Tray CDK CLI globally.
@trayio/cdk-cliinstalled via npm so you (or Claude) can scaffold and ship custom connectors.
Get your installer
Each teammate gets a personalized installer zip with their own Tray API token baked in, that way per-user audit lives in Tray's logs and revoking access is per-person, not whole-team.
- DM the Automation team on Slack.
Tell us you want the Tray Toolkit. We'll create your API token in Tray, generate a zip just for you, and DM it back the same way.
- Save the zip to your Downloads folder.
Don't forward it. The zip contains your personal token; treat it like a password. If you lose it, ping us and we'll regenerate.
One thing to know about attribution
Workflows you build via Claude will be attributed to a per-user API service account (e.g. claude-mcp-yourname) in Tray, not your personal Tray identity. They're still fully visible and editable by you in the Tray UI, it's just a cosmetic "Created by" label.
We chose this for clean per-user revoke: if you ever lose your laptop or change roles, the Automation team revokes one token and nobody else is affected. The trade is that workspace activity logs show claude-mcp-yourname instead of your name as the author. Pretty small price.
Install
Once you have the zip:
- Double-click the zip in Finder.
It unzips into a folder called
tray-toolkit-installer. - Open the folder, double-click
INSTALL.command.A Terminal window opens. The installer checks your prerequisites (Homebrew, Node 22+, Claude Code), validates your token against Tray, clones the upstream toolkit bundle, installs the plugin, wires the agents, and registers the MCP server. ~30 seconds end-to-end.
- Quit Claude Code (Cmd-Q) and reopen it.
Claude only picks up new MCP servers on a fresh launch. After reopen, the
tray-workspaceMCP shows up in/mcpand you're done.
First time double-clicking a .command file? macOS may warn you.
macOS Gatekeeper sometimes blocks unsigned .command files with a popup that says "Apple could not verify…". To proceed:
- Open System Settings → Privacy & Security.
- Scroll to the Security section. There'll be a line about
INSTALL.commandbeing blocked, with an Open Anyway button. - Click it, confirm, then re-double-click the file from Finder.
You only need to do this once per file.
Try a build
Open Claude Code and ask things like:
- "Build me a Tray workflow that polls Salesforce for new accounts and posts them to Slack."
- "List the operations available in the HubSpot connector."
- "Why did execution X of workflow Y fail?" (uses the
tray-logsagent) - "Scaffold a custom CDK connector for the Foo API, here's the OpenAPI spec."
Heads-up: debugging workflow logs
The tray-logs agent needs a different kind of token than the one in your installer, a short-lived UI session bearer that expires every ~8 hours. The installer ships without one because there's no point pre-staging a token that'll expire before you actually need it.
When you do want to debug a workflow, the agent will tell you exactly how to grab a fresh bearer from your browser. A one-click REFRESH-BEARER.command for this is coming in v1.1.
Security notes
- Your installer zip contains your personal Tray API token. Don't forward it; treat it like a password.
- Each teammate gets their own token (named
claude-mcp-<you>in Tray). Revoking your token revokes only your access, not anyone else's. - The token persists locally in
~/.config/tray/credentials.json(mode 600) and inside Claude Code's own MCP config. Both are user-readable only. - Tokens are workspace-scoped. They don't grant access to anything outside the workspace they were created in.
Architecture
How a per-user installer is built, shipped, and wired to Tray.ai.