Skip to main content
Glama
fosferon

gc_mcp

by fosferon
README.md
# gc_mcp

`gc_mcp` exposes Grand Central daemon capabilities as MCP tools.

It is a client, not a server of record: every tool call is proxied to a running
[`gc_daemon`](https://github.com/fosferon/gc_daemon). Without one listening on
`GC_DAEMON_URL` (default `http://localhost:4242`) the tools will load and then
fail to reach anything.

## Install

Point your MCP client at it — no clone or build required:

```json
{
  "mcpServers": {
    "gc": {
      "command": "npx",
      "args": ["-y", "@fosferon/gc-mcp"]
    }
  }
}
```

Or install it and use the binary directly:

```sh
npm install -g @fosferon/gc-mcp
gc-mcp                     # stdio (default) — the binary is unscoped
GC_MCP_TRANSPORT=streamable-http gc-mcp
```

From a clone, `npm install && npm run build` then point the client at
`node /path/to/gc_mcp/dist/index.js`.

## Parameter validation

Every tool rejects unsupported **top-level** parameters before its callback can
contact `gc_daemon`. MCP returns its standard `isError: true` tool result; the
diagnostic names the rejected parameter and lists the parameters registered for
that tool. This makes a misspelled or obsolete option recoverable instead of
silently ignoring it.

This boundary does not alter nested payload contracts: a declared map or object
parameter continues to accept the nested values its existing schema allows.

## Bee work queries

`gc_work` exposes Bee's query and dependency-analysis engine directly. Prefer a
bounded server-side query over fetching a backlog and filtering it in the client:

```json
{
  "action": "query",
  "text": "FameLine",
  "projects": ["mobus_umbrella", "lt_umbrella"],
  "status": "all",
  "order": "updated_at:desc",
  "detail": "compact",
  "limit": 10
}
```

Use `search` for relevance-ranked duplicate lookup, `ready` or the `what_next`
intent for actionable work, `traverse` for a bounded dependency neighborhood,
and `critical_path` for a blocker-to-goal or project-scoped path. The legacy
`plan` action is only a compatibility alias for `critical_path`; scheduling is
provided separately by `gc_plan`.

The tool also exposes discoverable registered intents and measures, project and
agent allocation, assignments, locks, measurements, rollups, and bottleneck
analysis. Call the relevant list action before guessing stored vocabulary.

## Configuration

| Variable | Default | Purpose |
|---|---|---|
| `GC_DAEMON_URL` | `http://localhost:4242` | Base URL of the `gc_daemon` this wraps. |
| `GC_MCP_TRANSPORT` | `stdio` | `stdio`, `streamable-http`, or `all`. |
| `GC_MCP_HOST` | `127.0.0.1` | Bind host, `streamable-http` only. |
| `GC_MCP_PORT` | `8765` | Bind port, `streamable-http` only. |
| `GC_MCP_PATH` | `/mcp` | HTTP path, `streamable-http` only. |
| `GH_TOKEN` | — | GitHub token for the `gh_*` tools. Falls back to `~/.config/gh-token`. |
| `GH_DEFAULT_REPO` | *unset* | `owner/repo` used by the **read-only** `gh_*` tools when `repo` is omitted. |

### Why `GH_DEFAULT_REPO` does not apply to writes

`gh_issue_create`, `gh_issue_edit` and `gh_issue_comment` require an explicit
`repo`. A write that infers its target from ambient configuration will
eventually file into the wrong tracker, and the caller who omitted the argument
gets no signal that it happened — the operation succeeds, somewhere else.
Reads carry no such consequence, so they may fall back to the environment.

There is deliberately no compiled-in default. A shipped repository name aims
every installation's bare calls at whatever tracker the author last worked on.

TDQS

C2.4/5.0

Scored across 63 tools

Disambiguation2/5

There is heavy overlap between many tools: gc_conversation, gc_agent_conversation, gc_aden, gc_peer_conversation, and gc_peer all provide nearly identical spawn/turn/get/list/delete chat sessions — an agent could easily misselect among them. gc_docs and gc_recall both search knowledge; gc_project_status is literally an alias for gc_ticker/get; gc_peer is a legacy alias for gc_peer_conversation. Several tools (gc_workflow vs gc_workflow_watch vs gc_tool_call) also blur boundaries.

Naming Consistency3/5

Most tools follow the gc_* prefix with snake_case, which provides surface consistency. However, the action-based dispatch convention means many tool names don't embed the verb; instead each gc_ tool takes an 'action' parameter (list, create, get, etc.), so the naming is more resource-oriented than verb_noun. There are also clear outliers like davinci_resolve, devonthink, gh_issues, and gh_issue_view which break the gc_ prefix pattern, and legacy aliases (gc_peer, gc_project_status) that don't follow the primary naming scheme.

Tool Count1/5

At 63 tools this is far beyond the well-scoped range and will create significant selection burden and confusion for agents. Many tools cover adjacent concerns that could be consolidated (six conversation/chat tools, multiple alias tools, schedule vs dispatch vs workflow overlapping). The count reflects a sprawling monolithic daemon rather than a focused server purpose, making it very heavy for any agent to navigate.

Completeness3/5

The server covers an extraordinarily broad domain spanning memory, workflows, scheduling, dispatch, finances, publishing, project management, and even video editing — yet gaps exist within each sub-area (e.g., only one gh_issue_view tool among several gh_issue_* tools, no gh PR coverage despite gh_issue_view). Some sub-domains feel complete (workflows have full CRUD+ops) while others are fragmented. The scope itself makes 'complete' coverage nearly impossible.

Maintenance

ActivityActive
ResponsivenessNo issues