Stop Editing JSON by Hand

On this page

There are four config files. One for Claude Desktop, one for Cursor, one for VS Code, one for Windsurf. Each lives in a different directory. Two of them use mcpServers. One uses servers. VS Code decided.

You’ve looked up the path at least twice. You’ve had a syntax error at least once. The server didn’t load and you weren’t sure if it was the JSON or the path or the token.

There’s a shorter way.

usepaso connect

Run this from the directory containing your usepaso.yaml:

usepaso connect claude-desktop
Added "Sentry" in Claude Desktop config.
  Config: ~/Library/Application Support/Claude/claude_desktop_config.json

Restart Claude Desktop to connect.

paso reads your declaration to get the service name, builds the correct config entry for the client, and writes the file. If the config doesn’t exist, it creates it. If USEPASO_AUTH_TOKEN isn’t set, it adds a placeholder and tells you.

The same command works for all four clients:

usepaso connect claude-desktop
usepaso connect cursor
usepaso connect vscode
usepaso connect windsurf

Each client gets the right config structure. Cursor and VS Code write a project-local file. Claude Desktop and Windsurf write to a global config.

usepaso disconnect

usepaso disconnect claude-desktop

Removes the entry for this service from the client config. If the entry doesn’t exist, it exits cleanly. No errors, nothing to clean up manually.

If an entry already exists

usepaso connect claude-desktop --force

Without --force, the command exits with an error if an entry for this service is already present. With it, the entry is overwritten. Useful when you’ve changed your declaration and want the config to reflect the new service name or path.

What it writes

For Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "sentry": {
      "command": "npx",
      "args": ["usepaso", "serve", "-f", "/absolute/path/to/usepaso.yaml"]
    }
  }
}

Claude Desktop doesn’t set a working directory when it starts servers, so paso uses the absolute path to your file.

For Cursor (.cursor/mcp.json in your project root):

{
  "mcpServers": {
    "sentry": {
      "command": "npx",
      "args": ["usepaso", "serve"]
    }
  }
}

IDE clients run from the project root, so the path isn’t needed.

VS Code (.vscode/mcp.json) follows the same pattern, but uses servers instead of mcpServers. That’s a VS Code decision, not ours.

The full workflow

usepaso init --name "Sentry"
# edit usepaso.yaml
usepaso validate
usepaso serve
usepaso connect claude-desktop

Declare. Validate. Serve. Connect. No JSON editing at any point.

Related: