# Setup MCP Server

> Add mcp-rubber-duck MCP server to an AI coding tool (Claude Desktop, Cursor, VS Code, Windsurf, etc.) Use when this capability is needed.

- Skill: `tomevault-io/setup-mcp-server` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/setup-mcp-server`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/setup-mcp-server/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/setup-mcp-server

---


# Setup mcp-rubber-duck

You are setting up **mcp-rubber-duck** as an MCP server in an AI coding tool.

## Reference

- `.claude/skills/setup-mcp-server/references/tool-configs.md` — per-tool JSON/YAML config templates
- `.claude/skills/setup-mcp-server/references/provider-env-vars.md` — env var reference
- `.claude/skills/setup-mcp-server/references/troubleshooting.md` — common issues

## Supported tools and config paths

| Tool | Config File (macOS) | Key | Notes |
|------|-------------------|-----|-------|
| Claude Desktop | `~/Library/Application Support/Claude/claude_desktop_config.json` | `mcpServers` | Windows: `%APPDATA%\Claude\claude_desktop_config.json` |
| Claude Code (user) | `~/.claude.json` | `mcpServers` | Prefer `claude mcp add` CLI |
| Claude Code (project) | `.mcp.json` | `mcpServers` | Shared via VCS |
| Cursor (project) | `.cursor/mcp.json` | `mcpServers` | |
| Cursor (global) | `~/.cursor/mcp.json` | `mcpServers` | |
| Windsurf | `~/.codeium/windsurf/mcp_config.json` | `mcpServers` | Supports `${env:VAR}` |
| VS Code | `.vscode/mcp.json` | `servers` | Different key name! Uses `${env:VAR}` |
| Continue | `.continue/config.yaml` | `mcpServers` (array) | YAML format |

ChatGPT supports MCP via UI only (Developer Mode > Add MCP Server), not a config file.

## 1. Determine target tool

If `$ARGUMENTS` specifies a tool name, use it. Otherwise ask the user:

Supported tools: `claude-desktop`, `claude-code`, `cursor`, `windsurf`, `vscode`, `continue`

## 2. Detect platform

Run `uname -s` to detect macOS / Linux / Windows (Git Bash). This affects config file paths.

## 3. Detect install method

Check in order:
1. `which mcp-rubber-duck` — if found, use `mcp-rubber-duck` as the command
2. If we're inside the mcp-rubber-duck repo (check for `package.json` with `"name": "mcp-rubber-duck"`), offer from-source via `node dist/index.js`
3. Default to `npx -y mcp-rubber-duck`

## 4. Ask about providers

Ask the user which providers to include. Offer these choices:
- **OpenAI** (`OPENAI_API_KEY`) — most popular
- **Google Gemini** (`GEMINI_API_KEY`)
- **Groq** (`GROQ_API_KEY`) — fast inference
- **Ollama** (local, no key needed)
- **CLI agents** (Claude CLI, Codex, Gemini CLI, Aider)

Allow multiple selections.

## 5. Ask about API keys

For each selected HTTP provider that needs a key, ask: **provide a real key now** or **use a placeholder** to fill in later?

- If real key: validate it looks reasonable (starts with expected prefix like `sk-` for OpenAI, `gsk_` for Groq)
- If placeholder: use descriptive placeholders like `your-openai-api-key-here`

## 6. Load reference templates

Read the config template from `.claude/skills/setup-mcp-server/references/tool-configs.md` to get the exact JSON/YAML structure for the target tool.

## 7. Write the configuration

### For Claude Code (`claude-code`)

Use the `claude mcp add` CLI command — this is the idiomatic way:

```bash
claude mcp add --scope user rubber-duck -- mcp-rubber-duck
```

Then set env vars by editing `~/.claude.json` to add the `env` block, or suggest the user set them in their shell profile.

If the user prefers project-scope, use `--scope project` (writes to `.mcp.json`).

### For all other tools

1. Determine the config file path (platform-aware) from the reference templates
2. Read the existing config file if it exists
3. If `rubber-duck` entry already exists, **warn the user** and ask before overwriting
4. If other MCP servers exist, **merge** — never overwrite the entire file
5. If the file doesn't exist, create it (and parent directories with `mkdir -p`)
6. If existing JSON is invalid, warn and offer to backup the broken file before writing
7. Write the final config

### Important details

- **Always** include `"MCP_SERVER": "true"` in the env block — this is required
- **VS Code** uses `"servers"` key, not `"mcpServers"` — get this right
- **Continue** uses YAML with `mcpServers` as an array of objects
- **Windsurf & VS Code** support `${env:VAR_NAME}` syntax for env var interpolation

## 8. Print verification steps

After writing the config, tell the user:

1. **Restart** the tool (fully quit and relaunch for desktop apps)
2. **Test** by using the `list_ducks` tool with `check_health: true`
3. **Troubleshoot** — point them to `.claude/skills/setup-mcp-server/references/troubleshooting.md` if anything goes wrong

## Important rules

- Never overwrite existing MCP server entries for other servers
- Always create parent directories before writing config files
- Use the exact JSON structure from the reference templates
- For env var interpolation tools (VS Code, Windsurf), prefer `${env:VAR}` syntax over hardcoded keys
- Include `DEFAULT_PROVIDER` set to the first selected HTTP provider

---
> Source: [nesquikm/mcp-rubber-duck](https://github.com/nesquikm/mcp-rubber-duck) — distributed by [TomeVault](https://tomevault.io).
<!-- tomevault:4.0:skill_md:2026-07-03 -->

