ws-mcp
Provides git status checks on workspaces, including branch, dirty/clean, ahead/behind remote, and counts of modified, untracked, and staged files.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ws-mcp show me my abandoned projects"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ws-mcp
An MCP server that gives LLMs full visibility into your ws-cli workspace tree.
Ask your AI assistant things like:
"What projects have I abandoned? Summarize where I left off on each one."
"Which workspaces have uncommitted git changes?"
"What tasks are open across all my ws/ projects?"*
"Find everything I was working on related to authentication."
The server traverses your workspace tree, reads metadata, checks git status, parses saved browser tabs, reads beads task databases, and exposes it all through MCP tools — no state of its own.
Prerequisites
Node.js >= 18
ws-cli installed and configured (provides the workspace tree that this server reads)
Related MCP server: DevContext
Installation
git clone https://github.com/camggould/ws-mcp.git
cd ws-mcp
npm installRegistering with an MCP Client
Claude Code (per-project)
Add a .mcp.json file to any project directory:
{
"mcpServers": {
"ws-mcp": {
"command": "node",
"args": ["/absolute/path/to/ws-mcp/src/server.js"]
}
}
}Claude Code (global)
claude mcp add --global ws-mcp node /absolute/path/to/ws-mcp/src/server.jsClaude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"ws-mcp": {
"command": "node",
"args": ["/absolute/path/to/ws-mcp/src/server.js"]
}
}
}Any MCP-compatible client
ws-mcp uses stdio transport — pipe stdin/stdout to node src/server.js.
Tools
list_workspaces
List all workspaces with metadata. Filter by status, staleness, or tags.
Parameter | Type | Description |
|
| Filter by status: |
|
| Only show workspaces not opened in this many days |
|
| Comma-separated tags to filter by (matches any) |
list_workspaces({})
list_workspaces({ status: "active" })
list_workspaces({ stale_days: 30, tags: "coding,research" })Returns: Array of { name, status, last_opened, created, tags, path }.
get_workspace
Deep-dive into a single workspace. Returns everything the server knows.
Parameter | Type | Description |
|
| Workspace name (e.g. |
get_workspace({ name: "ws/cli" })Returns:
meta — status, tags, created/last opened dates
git — branch, dirty/clean, ahead/behind remote, modified/untracked/staged file counts
tabs — saved browser tabs from last session (count + URLs)
tab_history — session count, first/last session timestamps, unique URL count across all sessions
beads — task tracker summary:
total_issues,by_statuscounts,open_by_prioritycounts (ornullif no beads database)days_since_opened / stale — staleness indicator (stale = 30+ days)
notes — full
workspace.mdcontent
get_workspace_tree
Full parent-child hierarchy as a nested JSON tree. No parameters.
get_workspace_tree({})Returns: Nested tree with { name, children[], meta?, path? } at each node.
find_stale_workspaces
Identify workspaces you may have forgotten about, sorted by most stale first.
Parameter | Type | Default | Description |
|
|
| Days without activity to consider stale |
find_stale_workspaces({ days: 7 })Returns: Array of { name, status, last_opened, days_since, tags }.
search_workspaces
Full-text search across workspace names, tags, workspace.md notes, and saved tab URLs.
Parameter | Type | Description |
|
| Search query (case-insensitive substring match) |
search_workspaces({ query: "authentication" })Returns: Array of { workspace, status, matches[] } where each match includes the field name and matching value/context.
summarize_all
High-level dashboard across all workspaces. No parameters.
summarize_all({})Returns:
total_workspaces — count
by_status — breakdown (
{ active: 3, paused: 1, ... })recently_active — workspaces opened in the last 7 days
stale_30_plus_days — workspaces untouched for 30+ days
list_beads
List individual tasks from a workspace's beads issue tracker. Supports filtering and returns tasks sorted by priority then creation date.
Parameter | Type | Default | Description |
|
| required | Workspace name (e.g. |
|
| Filter: | |
|
| Filter: | |
|
| Filter: | |
|
| Filter by label (exact match) | |
|
|
| Max issues to return (1–200) |
list_beads({ workspace: "betterlife" })
list_beads({ workspace: "betterlife", status: "open", priority: 1 })Returns: { workspace, count, issues[] } where each issue includes id, title, description, status, priority, priority_label, type, assignee, labels[], created_at, updated_at.
get_beads_across_workspaces
Aggregate task counts across multiple workspaces. Scope to a parent prefix or query everything.
Parameter | Type | Description |
|
| Only include workspaces under this prefix (e.g. |
|
| Only show workspaces that have at least one issue with this status |
get_beads_across_workspaces({})
get_beads_across_workspaces({ parent: "ws" })
get_beads_across_workspaces({ status: "open" })Returns:
aggregate —
total_open,workspaces_with_beads,by_statuscounts,open_by_prioritycountsworkspaces[] — per-workspace breakdown with
by_status,open_by_priority,open_total(sorted by most open issues first)
How It Works
┌──────────────┐ stdio ┌──────────┐ reads ┌──────────────────┐
│ MCP Client │ ◄────────────► │ ws-mcp │ ──────────────► │ ~/Workspaces/ │
│ (Claude, │ JSON-RPC │ server │ │ .workspace.yaml │
│ Cursor, │ │ │ │ tabs.json │
│ etc.) │ │ │ │ tabs-history.jsonl│
└──────────────┘ └──────────┘ │ workspace.md │
│ │ .beads/beads.db │
│ .git/ │
▼ └──────────────────┘
~/.config/ws/
config.jsonReads
~/.config/ws/config.jsonto find the workspaces root (defaults to~/Workspaces)Recursively walks the directory tree, following symlinks, looking for
.workspace.yamlmarker filesParses workspace metadata (YAML), saved tabs (
tabs.json), tab history (tabs-history.jsonl), and notes (workspace.md)Reads beads SQLite databases (
.beads/beads.db) in read-only mode for task counts and issue listingsRuns
git statuson workspaces that are git repos (via simple-git)Exposes everything through MCP tools over stdio transport
The server is stateless — it reads directly from the filesystem that ws-cli manages. No database, no cache, no background processes.
Development
# Run with auto-reload on file changes
npm run dev
# Run directly
npm startDependencies
Package | Purpose |
MCP server framework | |
Read-only access to beads task databases | |
Git status checks | |
Workspace metadata parsing | |
File pattern matching | |
Tool parameter validation |
Related
ws-cli — the CLI tool that creates and manages the workspace tree this server reads
License
MIT
Available Tools
8 toolsfind_stale_workspacesA
Find workspaces that have not been opened recently. Useful for identifying abandoned or forgotten projects.
Inputs: days.
get_beads_across_workspacesA
Aggregate beads task counts across multiple workspaces. Shows per-workspace breakdown and totals. Scope to a parent prefix (e.g. "ws" for ws/* workspaces) or omit for all.
Inputs: parent, status.
get_workspaceA
Get detailed status of a specific workspace including git status, saved tabs, tab history summary, notes, and staleness.
Inputs: name (required).
get_workspace_treeA
Get the full workspace hierarchy as a tree structure. Shows parent-child relationships between workspaces.
Inputs: no named parameters.
list_beadsA
List tasks from a workspace's beads issue tracker. Supports filtering by status, priority, type, and label. Returns tasks sorted by priority then creation date.
Inputs: workspace (required), type, label, limit, +2 more.
list_workspacesB
List all workspaces with their metadata. Optionally filter by status or staleness.
Inputs: tags, status, stale_days.
search_workspacesA
Search across all workspace metadata, notes, and tab history for a query string. Searches workspace names, tags, workspace.md content, and saved tab titles/URLs.
Inputs: query (required).
summarize_allA
Get a high-level summary of all workspaces: counts by status, stale projects, recent activity. Designed for asking "where do things stand across all my projects?"
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 8 tools
Most tools have clear, distinct purposes, but list_workspaces (with staleness filter) overlaps with find_stale_workspaces, and summarize_all also reports stale counts, causing potential confusion. The descriptions help differentiate, but an agent might misselect between these related tools.
All names are lowercase with underscores, but verbs vary (list, get, find, summarize, search). The verbs are semantically appropriate for each action, so the pattern is intuitive, though not as uniform as a pure verb_noun convention.
8 tools is well within the ideal 3-15 range for a workspace management server. Each tool covers a distinct aspect of workspace queries and bead aggregation without unnecessary bloat.
The tool set provides thorough read/query coverage for workspaces and bead tasks, including listing, details, hierarchy, staleness, search, and summaries. However, it lacks any mutation tools (create/update/delete) for workspaces or tasks, which may be a minor gap depending on the intended read-only scope.
Maintenance
Related MCP Connectors
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Official Fibery MCP server: query and update your workspace from any AI client via OAuth.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA read-only MCP server that provides AI agents with live, structured workspace awareness, including project listing, git status, and budgeted context packing, minimizing token usage.3 npm2MIT
- FlicenseNot gradedqualityDmaintenanceWorkspace-aware MCP server that provides AI clients with structural code understanding via AST parsing, hybrid retrieval, and git history, enabling accurate code search, definition lookup, and blame analysis.-
- AlicenseNot gradedqualityDmaintenanceMCP server that scans workspace roots to build a registry of version-controlled projects, exposing tools for searching, listing, and inspecting projects to help AI coding agents navigate multi-repo workspaces efficiently.MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for context switching across git worktrees and Claude Code agent sessions, providing a board of worktree status and distilled task summaries.152 npmMIT