workday-studio-mcp
README.md
# Workday Studio MCP
A local MCP (Model Context Protocol) server that gives Claude direct access to your Workday Studio workspace. Read, write, plan, and validate integration assemblies without copy-pasting XML back and forth.
Everything runs **locally** on your machine — no network calls, no tenant credentials, no shared state. The server only sees the Studio Workspace folder you point it at.
---
## What you get
20 tools across these categories:
| Category | What it does |
|---|---|
| **Navigation** | `list_studio_projects`, `list_project_files`, `read_integration_file`, `search_studio_files`, `get_workspace_structure` |
| **File management** | `write_integration_file`, `copy_file_from_project`, `rename_file`, `delete_file`, `validate_xml_file` |
| **Project setup** | `create_studio_project`, `create_xsl_transform` |
| **Assembly editing** | `list_assembly_steps`, `list_integration_params`, `add_assembly_step`, `update_sub_flow`, `validate_assembly` |
| **Planning** | `plan_integration` — design elicitation + skeleton generator |
| **Reference** | `get_step_type_reference` — confirmed step type docs with production XML examples |
| **Diagnostics** | `parse_server_log` — parse a Workday integration server log from `~/Downloads` |
A growing knowledge base lives at [`docs/studio-integration-patterns.md`](docs/studio-integration-patterns.md) — hard-won lessons captured from real Studio debugging sessions.
---
## Quick install
One line:
```bash
curl -fsSL https://raw.githubusercontent.com/andrew-price-huron/workday-studio-mcp/main/bin/quickstart.sh | bash
```
This clones the repo to `~/workday-studio-mcp`, installs dependencies, and prints the exact `claude mcp add` command for your machine.
Or do it manually — see **Manual setup** below.
---
## Prerequisites
- **Node.js 18+** — check with `node --version`
- **Workday Studio** installed with at least one project in your workspace
- **Claude Desktop** or **Claude Code (CLI)** — both work
---
## Manual setup
**1. Clone and install**
```bash
git clone https://github.com/andrew-price-huron/workday-studio-mcp.git
cd workday-studio-mcp
npm install
```
**2. Configure your workspace path**
```bash
copy config.json.example config.json
```
Open `config.json` and set `workspace_path` to the folder containing your Studio projects (the same one Eclipse opens). On a typical Huron Windows machine this looks like:
```json
{
"workspace_path": "C:\\Users\\yourname\\studio-workspace",
"max_file_size_kb": 500,
"backup_on_write": true,
"excluded_dirs": [".git", ".settings", "bin", "build", "node_modules", ".metadata", ".plugins"],
"excluded_extensions": [".class", ".jar", ".zip", ".bak"]
}
```
Or skip `config.json` entirely and set an environment variable in PowerShell:
```powershell
$env:STUDIO_WORKSPACE_PATH = "C:\Users\yourname\studio-workspace"
```
**3. Verify it starts**
```powershell
node src/index.mjs
```
You should see:
```
[studio-mcp] Server started. Workspace: C:\Users\yourname\studio-workspace
```
Press `Ctrl+C` to stop — Claude will spawn it on demand.
---
## Connect to Claude
### Option A — Claude Code (CLI)
```powershell
claude mcp add studio-mcp node C:\Users\yourname\workday-studio-mcp\src\index.mjs
```
Confirm:
```powershell
claude mcp list
```
### Option B — Claude Desktop
Edit `%APPDATA%\Claude\claude_desktop_config.json` and add inside `mcpServers`:
```json
{
"mcpServers": {
"studio-mcp": {
"command": "node",
"args": ["C:\\Users\\yourname\\workday-studio-mcp\\src\\index.mjs"]
}
}
}
```
Save and **restart Claude Desktop**.
> **Tip:** Run `where.exe node` in PowerShell to get your full node path if Claude can't find it.
---
## Use it
### List projects
> "List my Studio projects"
### Read a file
> "Read the assembly.xml from INT145"
### Plan a new integration
> "I need to build a new integration"
Claude asks design questions (data source, destination, trigger, record volume, auth, error handling) before generating anything. Then it writes a skeleton `assembly.xml` + `assembly-diagram.xml` you can open in Studio immediately.
### Fill in a sub-flow
> "Fill in the GetWorkers sub-flow — here's the RAAS sample: [paste XML]"
`update_sub_flow` surgically replaces the TODO stub with real steps and validates the result.
### Search across integrations
> "Find all uses of integrationMapLookup"
### Validate
> "Validate the assembly for INT145"
Returns errors (broken routes, illegal comments, missing attributes) and warnings (missing XSL files, unresolved sub-flow endpoints).
### Look up a step type
> "Show me the cc:http-out reference"
Returns confirmed XML examples, schema rules, and gotchas.
### Parse a server log
After downloading a `server-{wid}.log` from Workday (View Integration Events → expand documents → click the `server-*.log`):
> "Parse my latest server log"
Returns structured timeline, unique errors, and XSLT messages. The parser auto-finds the most recent `server-*.log` in `~/Downloads`.
---
## Project structure
```
Workday-studio-mcp/
├── src/
│ ├── index.mjs # Entry — registers tools, starts server
│ ├── config.mjs # Loads workspace path
│ ├── fs.mjs # FS helpers + path traversal protection
│ ├── xml.mjs # XML validation wrapper
│ ├── assembly-validator.mjs # Studio-specific assembly rules
│ └── tools/
│ ├── list-projects.mjs
│ ├── list-files.mjs
│ ├── read-file.mjs
│ ├── write-file.mjs
│ ├── search-files.mjs
│ ├── workspace-tree.mjs
│ ├── validate-xml.mjs
│ ├── create-project.mjs
│ ├── list-assembly-steps.mjs
│ ├── list-integration-params.mjs
│ ├── add-assembly-step.mjs
│ ├── create-xsl-transform.mjs
│ ├── copy-file-from-project.mjs
│ ├── rename-file.mjs
│ ├── delete-file.mjs
│ ├── get-step-type-reference.mjs # Step type docs
│ ├── plan-integration.mjs # Design elicitation
│ ├── update-sub-flow.mjs # Surgical sub-flow replacement
│ ├── validate-assembly.mjs # Studio rules engine
│ └── parse-server-log.mjs # Local log parser
├── docs/
│ └── studio-integration-patterns.md # Shared knowledge base
├── bin/
│ ├── install.sh
│ └── quickstart.sh
├── config.json.example
├── CLAUDE.md # Instructions for Claude when working in this repo
├── package.json
└── .gitignore
```
---
## Security
- The server only sees files inside your configured `workspace_path` — path traversal attempts are blocked.
- No credentials, API keys, or Workday tenant details are stored or transmitted.
- `config.json` (which contains your local workspace path) is gitignored.
- The server runs over stdio — no network ports are opened.
---
## Contributing patterns back
When you discover a new Studio quirk, schema rule, or assembly pattern, add it to [`docs/studio-integration-patterns.md`](docs/studio-integration-patterns.md) and open a PR. See [`CLAUDE.md`](CLAUDE.md) for guidance on what kinds of learnings belong there. The goal is a collective memory across the team — every debugging session that finds a new gotcha makes the next one cheaper.
---
## Troubleshooting
**`workspace_path not configured`**
Run `cp config.json.example config.json` and set the path.
**`Workspace path does not exist`**
Check the path in `config.json` matches your Studio workspace folder.
**Tools don't appear in Claude**
Ensure the path in your Claude config is absolute, not relative. Restart Claude Desktop after editing.
**`node: command not found` in Claude**
Use the full node path:
```powershell
where.exe node
```
Then use that full path (e.g. `C:\Program Files\nodejs\node.exe`) in your Claude config.
---
## License
MIT
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessSyncing