SDODS
Guides

Connect AI coding tools

Add SDODS to Claude Code, Codex, Cursor, VS Code, Gemini CLI, Windsurf and any MCP client — as a plugin, as skills, as a local MCP server or through your team's endpoint.

What you'll learn

The four ways to give an AI coding agent SDODS — plugin, skills, local MCP server, shared endpoint — the exact configuration for each popular client, and how to check it works.

Using an AI coding agent? Install SDODS:

Install the SDODS plugin in Claude Code: skills, subagents, commands and the MCP server.

  1. /plugin marketplace add siri1410/sdods-skills
  2. /plugin install sdods@sdods

Choose how

OptionWhat the agent getsNeeds
Claude Code pluginskills, slash commands, the five SDODS subagents, the MCP server and a session hook, in one installClaude Code
Skillshow to work in an SDODS workspace: tags, step reuse, locators, the commands to run and how to read resultsany agent that reads Agent Skills
Local MCP serverthe SDODS tools — projects, features, steps, runs, results, healing, browser — against your workspaceNode 22 and npx
Dedicated endpointthe same tools from one shared SDODS server, filtered by a scoped token; nothing installed on the laptopan SDODS server and an API token

Skills teach, MCP acts. Most people want both, which is what the plugin is. SDODS is free for all of them: Apache-2.0 on npm, unlimited API tokens, no paid tier.

Claude Code plugin

/plugin marketplace add siri1410/sdods-skills
/plugin install sdods@sdods
PartWhat you get
Slash commands/sdods:setup, /sdods:test, /sdods:plan, /sdods:generate, /sdods:heal, /sdods:review, /sdods:upgrade
Skillsworkspace (the working rules), run, record and start-ui, which Claude uses on its own when a request matches
Subagentssdods-planner, sdods-generator, sdods-healer, sdods-upgrader, sdods-reviewer — read-only on your files, writing through SDODS proposals
MCP serversdods, started with npx -y @sdods/cli mcp in the project you opened
Hookon session start inside an SDODS workspace, a short summary of its projects and environments; it reads local files only and prints nothing elsewhere

To offer the plugin to everyone who opens a repository, commit this to .claude/settings.json. Claude Code asks each person to trust the marketplace the first time.

.claude/settings.json
{
  "extraKnownMarketplaces": {
    "sdods": { "source": { "source": "github", "repo": "siri1410/sdods-skills" } }
  },
  "enabledPlugins": { "sdods@sdods": true }
}

Update with /plugin marketplace update sdods.

Skills

The skills follow the open Agent Skills format, so one copy works across agents. Install them with the skills CLI, which asks which agents you use:

npx skills add siri1410/sdods-skills

Add -a claude-code, -a codex, -a cursor or -a github-copilot to pick agents up front, and -g to install for your user instead of the project.

Or from npm, without GitHub:

npx -y @sdods/cli skills install

That writes .claude/skills and .agents/skills; --agent cursor,copilot,gemini adds other folders and --global installs under your home directory. See sdods skills.

AgentProject folderUser folder
Claude Code.claude/skills~/.claude/skills
Codex.agents/skills~/.agents/skills
Cursor.agents/skills, .cursor/skills~/.agents/skills, ~/.cursor/skills
GitHub Copilot.github/skills, .agents/skills~/.copilot/skills
Gemini CLI.gemini/skills, .agents/skills~/.gemini/skills
OpenCode.opencode/skills, .agents/skills~/.config/opencode/skills

Local MCP server

Every stdio client runs the same command. There is no npm package called sdods; the command belongs to @sdods/cli, and -y lets npx fetch it without a prompt:

npx -y @sdods/cli mcp --project <slug> --env <env>

--project and --env are defaults for tools and prompts, and both are optional. The server finds the workspace from the directory the client starts it in. A client that starts servers somewhere else — Claude Desktop, or any user-level config — needs the workspace named:

npx -y @sdods/cli --cwd /path/to/workspace mcp

For the clients SDODS knows, one command writes the configuration and keeps any servers already there:

sdods mcp install claude

The other targets are codex, cursor, vscode, windsurf and gemini.

Dedicated MCP endpoint

Every SDODS server serves MCP over Streamable HTTP at /mcp: sdods serve on a machine your team can reach, the Docker image or a Cloud Run deployment. Nothing runs on each laptop, runs and results are shared, and each person's token decides which tools they see.

Create a token

In the web UI under Settings → API tokens, or:

sdods tokens create --user <username> --name claude-code --scopes runs:read,runs:write,features:read

Scopes default to everything the user's role allows and can only be narrower. The token is shown once.

Keep it in the environment

export SDODS_TOKEN=amx_...

The configurations below read SDODS_TOKEN instead of storing the secret in a file you might commit.

Check the endpoint

curl https://<your-sdods-host>/api/mcp/info

It answers without a token with the URL, transport, tool list and ready-made snippets. Settings → MCP clients in the web UI shows the same snippets with your server's URL filled in, and a Test connection button.

If your administrator gave you an account on https://api.sdods.com, the endpoint is https://api.sdods.com/mcp. The snippets below use https://<your-sdods-host>/mcp.

ChatGPT developer mode and Claude.ai custom connectors connect only to servers that sign users in with OAuth, which SDODS does not offer yet. Use one of the clients below with a token, or bridge a stdio-only app with mcp-remote as shown for Claude Desktop.

Every client

Each section has the local (stdio) form first and the endpoint form second.

Claude Code

claude mcp add sdods -- npx -y @sdods/cli mcp
claude mcp add --transport http sdods https://<your-sdods-host>/mcp --header 'Authorization: Bearer ${SDODS_TOKEN}'

Add -s project to write .mcp.json for the whole team. The single quotes keep ${SDODS_TOKEN} in the file, and Claude Code expands it from each person's environment. Check with /mcp.

Codex

codex mcp add sdods -- npx -y @sdods/cli mcp
codex mcp add sdods --url https://<your-sdods-host>/mcp --bearer-token-env-var SDODS_TOKEN

Both write ~/.codex/config.toml, which the Codex CLI, IDE extension and desktop app share:

~/.codex/config.toml
[mcp_servers.sdods]
url = "https://<your-sdods-host>/mcp"
bearer_token_env_var = "SDODS_TOKEN"

Gemini CLI

gemini mcp add sdods npx -- -y @sdods/cli mcp
gemini mcp add --transport http --header "Authorization: Bearer $SDODS_TOKEN" sdods https://<your-sdods-host>/mcp

The -- matters: without it Gemini reads -y as its own flag. In settings.json, httpUrl is Streamable HTTP; url would mean the older SSE transport.

.gemini/settings.json
{
  "mcpServers": {
    "sdods": {
      "httpUrl": "https://<your-sdods-host>/mcp",
      "headers": { "Authorization": "Bearer $SDODS_TOKEN" }
    }
  }
}

Cursor

Use Add to Cursor in the box at the top of this page, or write the file:

.cursor/mcp.json
{
  "mcpServers": {
    "sdods": { "command": "npx", "args": ["-y", "@sdods/cli", "mcp"] }
  }
}
.cursor/mcp.json (endpoint)
{
  "mcpServers": {
    "sdods": {
      "url": "https://<your-sdods-host>/mcp",
      "headers": { "Authorization": "Bearer ${env:SDODS_TOKEN}" }
    }
  }
}

~/.cursor/mcp.json makes it available in every project.

VS Code and GitHub Copilot

Use Add to VS Code at the top of this page, run code --add-mcp '{"name":"sdods","command":"npx","args":["-y","@sdods/cli","mcp"]}', or write the file. VS Code calls the top-level key servers, and prompts for the token once with an input:

.vscode/mcp.json
{
  "inputs": [
    {
      "id": "sdods-token",
      "type": "promptString",
      "description": "SDODS API token",
      "password": true
    }
  ],
  "servers": {
    "sdods": {
      "type": "http",
      "url": "https://<your-sdods-host>/mcp",
      "headers": { "Authorization": "Bearer ${input:sdods-token}" }
    }
  }
}

For stdio, the server entry is { "type": "stdio", "command": "npx", "args": ["-y", "@sdods/cli", "mcp"] }.

Windsurf

Windsurf reads one user-level file and names the remote URL serverUrl:

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "sdods": {
      "serverUrl": "https://<your-sdods-host>/mcp",
      "headers": { "Authorization": "Bearer ${env:SDODS_TOKEN}" }
    }
  }
}

For stdio use { "command": "npx", "args": ["-y", "@sdods/cli", "--cwd", "/path/to/workspace", "mcp"] }. Windsurf caps the number of enabled tools; --caps core,run,analyze keeps SDODS under it.

Zed

settings.json
{
  "context_servers": {
    "sdods": { "command": "npx", "args": ["-y", "@sdods/cli", "mcp"] }
  }
}

For the endpoint: { "url": "https://<your-sdods-host>/mcp", "headers": { "Authorization": "Bearer <token>" } }.

JetBrains AI Assistant and Junie

In AI Assistant, open Settings → Tools → AI Assistant → Model Context Protocol, add a server and paste the mcpServers JSON from the Cursor section. Junie reads the same shape from .junie/mcp/mcp.json in the project or ~/.junie/mcp/mcp.json.

OpenCode

opencode.json
{
  "mcp": {
    "sdods": { "type": "local", "command": ["npx", "-y", "@sdods/cli", "mcp"], "enabled": true }
  }
}

For the endpoint: { "type": "remote", "url": "https://<your-sdods-host>/mcp", "headers": { "Authorization": "Bearer <token>" }, "oauth": false }.

Amp

amp mcp add sdods -- npx -y @sdods/cli mcp

Kiro

.kiro/settings/mcp.json
{
  "mcpServers": {
    "sdods": { "command": "npx", "args": ["-y", "@sdods/cli", "mcp"] }
  }
}

Cline, Roo Code, Continue, Goose, Warp and Factory Droid

ClientWhereEndpoint entry
ClineMCP Servers panel → Configure"type": "streamableHttp", "url": …
Roo Code.roo/mcp.json"type": "streamable-http", "url": …, "headers": …
Continuea YAML file in .continue/mcpServers/type: streamable-http, url, requestOptions.headers
Goosegoose configure, or ~/.config/goose/config.yamltype: streamable_http, uri
Warp.warp/.mcp.json or ~/.warp/.mcp.json"url": …, "headers": …
Factory Droid.factory/mcp.json or ~/.factory/mcp.json"type": "http", "url": …, "headers": …

Every one of them takes npx -y @sdods/cli mcp for stdio.

Claude Desktop

Claude Desktop's config file starts stdio servers only, outside any project, so name the workspace:

claude_desktop_config.json
{
  "mcpServers": {
    "sdods": {
      "command": "npx",
      "args": ["-y", "@sdods/cli", "--cwd", "/path/to/workspace", "mcp"]
    }
  }
}

The file is ~/Library/Application Support/Claude/claude_desktop_config.json on macOS and %APPDATA%\Claude\claude_desktop_config.json on Windows. To reach an endpoint instead, bridge it with mcp-remote:

claude_desktop_config.json (endpoint)
{
  "mcpServers": {
    "sdods": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://<your-sdods-host>/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": { "AUTH_HEADER": "Bearer <token>" }
    }
  }
}

LM Studio uses the same mcpServers shape in ~/.lmstudio/mcp.json.

Check it works

List the tools without any client involved — this is also the fastest way to see a real error:

npx -y @sdods/cli mcp --list-tools

Then ask the agent something only SDODS can answer, such as "list the SDODS projects and their environments".

SymptomCauseFix
CONNECTION_CLOSED or the server exits at oncethe config says npx sdods, a package that does not existuse npx -y @sdods/cli mcp, or rerun sdods mcp install <client>
401 from the endpointno token, a revoked or expired one, or SDODS_TOKEN unsetcreate a token and export it in the shell that starts the client
A tool is missing or refused with 403the token's scopes do not include itcreate a token with the scope; it can never exceed your role
Tools find no projectsthe client started the server outside the workspaceadd --cwd /path/to/workspace before mcp
npx: command not found in a desktop appthe app does not see the Node on your shell's PATHuse the full path to npx, or install Node system-wide
Too many tools for the clientevery capability is enabled--caps core,run,analyze

Next steps

On this page