gc_mcp
# 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
Scored across 63 tools
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.
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.
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.
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.