Before starting, ensure you meet all general prerequisites defined in the Getting Started guide, including choosing an authentication method.
For assistance installing and configuring Claude Code CLI, consult the official documentation: https://docs.claude.com/claude-code.
Jump to Claude Desktop setup →
Jump to Claude Code CLI setup →
Zylo MCP with Claude Code CLI Setup
Option A: OAuth 2.0 with PKCE
claude mcp add --transport http zylo https://api.zylo.com/mcpOn first use, Claude Code will open your browser for you to sign in to Zylo. Tokens are refreshed automatically.
Option B: API Key
Replace YOUR_TOKEN_ID:YOUR_TOKEN_SECRET with your actual Zylo API key.
Note: The server name and URL must come before the
--headerflag. The Claude CLI rejects the inverse order.
claude mcp add --transport http zylo https://api.zylo.com/mcp \
--header "Authorization: Bearer YOUR_TOKEN_ID:YOUR_TOKEN_SECRET"Verify Connection
Start a Claude Code session and try:
Show me my top 10 applications by spend
Claude should automatically:
- Connect to Zylo MCP server (if using OAuth, your browser will open to sign in)
- Call
initialize_sessionto load your permissions - Call
query_datato fetch applications - Display formatted results
Zylo MCP with Claude Desktop App Setup
Note: After setting up any MCP connection, the individual tools can be managed by navigating to
Customize->Connectorsand selecting the relevant connection. For details on the tools available via Zylo's MCP server, see Tools Reference.
Prerequisites
- Install Node.js 20+ and npm; these tools are required by Claude Desktop in order to communicate with MCP servers. (https://nodejs.org/)
- If using nvm, ensure your default version is 20+:
nvm alias default 20(or22,24, etc.) - Check your version:
node --version
- If using nvm, ensure your default version is 20+:
Note: The mcp-remote tool is installed automatically via npx when Claude Desktop starts. This is an industry-standard bridge that is maintained by the official Model Context Protocol team, and is used to translate between Claude Desktop's stdio protocol and HTTP-based MCP servers.
Step 1: Find Configuration File
Locate your Claude Desktop configuration file within the Claude Desktop app by navigating to Settings -> Developer -> Edit Config. Default locations are also included below.
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
Step 2: Edit Configuration
Open the configuration file in a text editor and add the information relevant for your desired authentication method:
Option A: OAuth 2.0 with PKCE
Note: When you first start a conversation,
mcp-remotewill open your browser to sign in to Zylo. After signing in, authentication is handled automatically.
{
"mcpServers": {
"zylo": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.zylo.com/mcp"
]
}
}
}Option B: API Key
Note: Replace
YOUR_TOKEN_ID:YOUR_TOKEN_SECRETwith your Zylo API key details.
{
"mcpServers": {
"zylo": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.zylo.com/mcp",
"--header",
"Authorization: Bearer YOUR_TOKEN_ID:YOUR_TOKEN_SECRET"
]
}
}
}Step 3: Restart Claude Desktop
Completely quit and reopen Claude Desktop for the changes to take effect. Note that in some cases (i.e. MacOS), you may have to tell Claude to quit multiple times before it fully closes.
What You Can Do
Once connected, you can ask Claude to:
Analyze Your Data
- "Show me all applications spending over $50,000 annually"
- "Which contracts are expiring in the next 90 days?"
- "What's our total SaaS spend by department?"
Manage Your Portfolio
- "Create a 2025 budget of $150,000 for Salesforce"
- "Update the contract end date for DocuSign to December 31, 2025"
- "Mark the Slack application as inactive"
Get Insights
- "What applications have the highest cost per user?"
- "Show me unused or underutilized licenses"
- "Generate a renewal forecast for Q1 2025"
Troubleshooting
Claude Code CLI: "Connection failed"
If using OAuth PKCE:
- Ensure your browser opened for sign-in — check for pop-up blockers
- Verify you signed in with valid Zylo credentials
- Confirm URL is exactly:
https://api.zylo.com/mcp - Try removing and re-adding the MCP server:
claude mcp remove zylothen re-add
If using API Key:
- Verify API key format:
token_id:token_secret(with colon) - Ensure no extra spaces or line breaks in the command
- Confirm URL is exactly:
https://api.zylo.com/mcp - Check that your API key is active in Zylo Admin Panel
Test your API key:
curl -X POST https://api.zylo.com/mcp \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'Claude Desktop: "Unable to connect" or npm errors
Node.js version issues:
If you see errors like:
ReferenceError: File is not definedFailed to replace env in config: ${NPM_TOKEN}Cannot read property 'loaded' of undefined
These indicate your Node version is too old.
- Check your Node version using
node --versionin a terminal. - If version is below 20.0.0, download and install Node 20+ nodejs.org and restart the terminal.
- Verify your Node.js version is now v20.x.x or higher using
node --version. - Completely quit and reopen Claude Desktop to ensure it loads the new Node version. Note that on some operating systems (e.g. MacOS), you may need to tell Claude to quit multiple times before it fully closes.
For other connection issues:
- Ensure configuration file has correct JSON syntax (use JSONLint)
To verify npm and mcp-remote are available:
npm info mcp-remote version
# Should print a version number (e.g., 0.1.38)"Permission denied"
Your API key doesn't have permission for the requested action.
Solution:
- While logged into a Zylo admin account, navigate to Zylo Admin Panel → Company Tokens
- Find the relevant token and click
Edit - Add required permissions. To see a full list of permissions and their descriptions, see Permissions
- Click
Save - Try your request again (no need to reconfigure Claude)
Complex queries time out
Simplify your query:
- Add specific filters (date ranges, status, etc.)
- Reduce the number of fields requested
- Query smaller date ranges
- Break complex queries into multiple smaller ones