Skip to main content
Glama
M0-AR

gsd-mcp-server

by M0-AR
README.md
# gsd-mcp-server

MCP server for the [GSD (Get Shit Done)](https://opencode.ai) lifecycle framework. Exposes GSD project state, phases, milestones, and commands as MCP tools and resources.

[![npm version](https://img.shields.io/npm/v/@md0ar/gsd-mcp-server)](https://www.npmjs.com/package/@md0ar/gsd-mcp-server)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![MCP Registry](https://img.shields.io/badge/MCP-Registry-6C47FF)](https://registry.modelcontextprotocol.io)

## Features

- **34 tools** — manage project lifecycle via MCP tool calls
- **6 resources** — read project files (state, roadmap, requirements, config, help)
- **Zod-validated inputs** — type-safe parameter validation
- **Secure execution** — no shell injection (`execFileSync` with argument arrays)

## Quick Start

Run instantly with npx (no install needed):

```bash
npx -y @md0ar/gsd-mcp-server

Or install globally:

```bash
npm install -g @md0ar/gsd-mcp-server
```

## Configuration

### opencode.jsonc

```jsonc
{
  "mcp": {
    "gsd-mcp-server": {
      "type": "local",
      "command": ["npx", "-y", "@md0ar/gsd-mcp-server"],
      "enabled": true,
      "timeout": 30000
    }
  }
}
```

### Claude Desktop

`~/Library/Application Support/Claude/claude_desktop_config.json`

```json
{
  "mcpServers": {
    "gsd-mcp-server": {
      "command": "npx",
      "args": ["-y", "@md0ar/gsd-mcp-server"]
    }
  }
}
```

### Cursor

`.cursor/mcp.json`

```json
{
  "mcpServers": {
    "gsd-mcp-server": {
      "command": "npx",
      "args": ["-y", "gsd-mcp-server"]
    }
  }
}
```

### VS Code

`.vscode/mcp.json`

```json
{
  "servers": {
    "gsd-mcp-server": {
      "command": "npx",
      "args": ["-y", "@md0ar/gsd-mcp-server"]
    }
  }
}
```

> Always use `-y` with `npx` to skip the confirmation prompt — MCP hosts need non-interactive execution.

## Requirements

- **Node.js 18+**
- **GSD framework** — the server wraps the [GSD CLI](https://opencode.ai). Install opencode to use the full GSD lifecycle.

## Tools

| Tool | Params | Description |
|------|--------|-------------|
| `gsd_state` | — | Current project state |
| `gsd_progress` | — | Next step in the GSD lifecycle |
| `gsd_new_project` | `name`, `description?` | Initialize a new project |
| `gsd_new_milestone` | `name` | Start a new milestone |
| `gsd_map_codebase` | — | Analyze existing codebase |
| `gsd_discuss_phase` | `phase` | Capture implementation decisions |
| `gsd_list_phases` | — | List roadmap phases |
| `gsd_plan_phase` | `phase` | Create task plans |
| `gsd_execute_phase` | `phase` | Execute phase plans |
| `gsd_verify_work` | `phase` | Verify phase work |
| `gsd_quick` | `task`, `full?` | Ad-hoc task |
| `gsd_debug` | `issue` | Systematic debugging |
| `gsd_spike` | `idea`, `quick?` | Throwaway experiment |
| `gsd_sketch` | `idea` | UI design sketch |
| `gsd_complete_milestone` | `version` | Archive milestone |
| `gsd_add_todo` | `description` | Capture todo |
| `gsd_check_todos` | `area?` | List pending todos |
| `gsd_ship` | `phase` | Create PR |
| `gsd_add_phase` | `description` | Add new phase |
| `gsd_insert_phase` | `after`, `description` | Insert phase |
| `gsd_settings` | — | Configure toggles |
| `gsd_set_profile` | `profile` | Switch model profile |
| `gsd_run` | `command` | Run any GSD command |
| `gsd_validate` | `check`, `repair?` | Run validation (consistency/health/agents) |
| `gsd_roadmap_analyze` | — | Full roadmap + disk status analysis |
| `gsd_phase_complete` | `phase` | Mark a phase as complete |
| `gsd_config_get` | `key` | Read config value |
| `gsd_config_set` | `key`, `value` | Write config value |
| `gsd_commit` | `message`, `files?` | Commit planning docs to git |
| `gsd_scaffold` | `type`, `phase`, `name?` | Create document templates |
| `gsd_audit_uat` | — | Scan phases for unresolved verification |
| `gsd_websearch` | `query`, `limit?`, `freshness?` | Web search via Brave API |
| `gsd_todo_complete` | `filename` | Mark todo as completed |
| `gsd_workstreams` | `action`, `name?` | Manage parallel workspaces |

## Resources

| URI | Description |
|-----|-------------|
| `gsd://state` | Current project state |
| `gsd://project` | Project definition |
| `gsd://roadmap` | Phase roadmap |
| `gsd://requirements` | Feature requirements |
| `gsd://config` | Planning config |
| `gsd://help` | Command reference |

## Testing

```bash
npm test
```

Runs 188 tests across three suites: 94 main + 37 edge + 57 functional (real GSD project).

## Publishing (for maintainers)

```bash
# 1. Log in to npm
npm login

# 2. Publish to npm
npm publish

# 3. Publish to MCP Registry (optional)
npx -y @modelcontextprotocol/publisher login
npx -y @modelcontextprotocol/publisher publish
```

Requirements:
- [npm account](https://www.npmjs.com/signup)
- [GitHub account](https://github.com/signup) (for MCP Registry auth)
- Granular Access Token with `Read and write` scope for CI/CD

## License

MIT

TDQS

B3/5.0

Scored across 34 tools

Disambiguation4/5

Most tools target distinct workflow stages or resources, with clear names like gsd_add_phase, gsd_plan_phase, and gsd_verify_work. A few status-related tools (gsd_state, gsd_progress, gsd_roadmap_analyze) could be confused, but their descriptions clarify different focuses.

Naming Consistency3/5

Tools consistently use the gsd_ prefix and snake_case, but verb/noun order varies (e.g., gsd_phase_complete vs. gsd_complete_milestone, gsd_todo_complete vs. gsd_check_todos). Some tools are bare nouns (gsd_state, gsd_settings) instead of verb_noun patterns, creating minor inconsistency.

Tool Count2/5

With 34 tools, the server exceeds the 25+ threshold, feeling heavy even for a comprehensive GSD workflow. The count is justified by the broad scope, but it may overwhelm agents and increase the risk of misselection.

Completeness5/5

The tool set covers the full GSD lifecycle: project/milestone initialization, phase planning/execution/verification, todo management, config, git operations, shipping, debugging, and even web search. No obvious dead ends—gsd_run provides a fallback for any unexposed command.

Maintenance

ActivityInactive
ResponsivenessNo issues