Merge remote-tracking branch 'origin/main' into feat/web-search-templates

# Conflicts:
#	completions/mcpctl.bash
#	completions/mcpctl.fish
#	src/cli/src/commands/create.ts
#	src/db/src/seed/index.ts
This commit is contained in:
Michal
2026-08-12 23:11:54 +01:00
83 changed files with 7354 additions and 318 deletions

View File

@@ -164,12 +164,27 @@ The `/mcpctl` switcher runs with `--skip-extension --skip-marker`, so switching
projects from inside prime-agent never re-scopes whichever repository
prime-agent happened to be started in.
See [docs/prime-agent-extension.md](docs/prime-agent-extension.md) for full details.
Preview the change without writing anything:
```bash
mcpctl config prime-agent --project monitoring --dry-run
```
`config claude` registers in **user scope** by default — one `mcpctl` MCP server
in `~/.claude.json` that applies in every directory and window, so you wire it
once rather than per checkout. Use `--scope project` (or `-o`) for a repo that
wants its own pinned project.
Inside Claude Code:
- `/mcpctl [project]` — switch projects, then reconnect the `mcpctl` server from
`/mcp` (no restart)
- the active project shows in the status line at the bottom of the screen
See [docs/claude-integration.md](docs/claude-integration.md) for full details.
### Connect pi
[pi](https://github.com/earendil-works/pi) does not support MCP, but it supports
@@ -195,6 +210,69 @@ Inside pi:
See [docs/pi-extension.md](docs/pi-extension.md) for full details.
### Connect opencode
[opencode](https://opencode.ai) supports MCP natively *and* exposes an API for
its own MCP registry, so mcpctl mounts the project through the running app —
which means you can **switch projects from the TUI without restarting**.
```bash
mcpctl config opencode --project monitoring
```
This mints (or reuses) the project's gateway token into
`~/.mcpctl/opencode-state.json` (0600 — the token never lands in
`opencode.json`), installs a server plugin into
`~/.config/opencode/plugin/mcpctl.ts` and a TUI plugin into
`~/.config/opencode/mcpctl/`, registers the latter in
`~/.config/opencode/tui.json`, and syncs skills into
`~/.config/opencode/skill/`.
Inside opencode:
- `/mcpctl` (or `<leader>m`) — **switch project** from a filterable picker;
takes effect on the next turn, no restart
- `/mcpctl-status` — active project, mount state, gateway URL
- `/mcpctl-skills` — re-sync this project's skills
- the active project shows as `mcpctl:<project>` in the prompt footer, next to
the model name
Skip individual steps as needed:
```bash
mcpctl config opencode --project monitoring --token mcpctl_pat_xxx # provide token, don't mint
mcpctl config opencode --project monitoring --skip-skills # don't sync skills
mcpctl config opencode --project monitoring --skip-plugin # state only, leave plugins alone
mcpctl config opencode --project monitoring --skip-marker # don't touch .mcpctl-project here
mcpctl config opencode --project monitoring --dry-run # print the plan, write nothing
```
Re-sync skills on their own with
`mcpctl skills sync --agent opencode --project monitoring`.
See [docs/opencode-extension.md](docs/opencode-extension.md) for full details.
### Run Claude Code on the homelab LLM
The homelab gateway (LiteLLM in front of vLLM) already serves the Anthropic
Messages API, so Claude Code can talk to it directly — no bridge:
```bash
claude-vllm --init # write ~/.config/mcpctl/claude-vllm.jsonc (0600)
claude-vllm # use it
claude-vllm --model deepseek-v4-max
claude-vllm --list # show what it would use
claude-vllm -- -p "summarise this repo" # args after -- go to claude
```
It reads its own config (shaped like `opencode.jsonc`, but a separate file),
falling back to `~/.pi/agent` or `~/.prime/agent` so it works before you have
written one. The key may be a literal in the 0600 file, `${ENV_VAR}`, or an env
var name — it is never stored in the tool.
See [docs/claude-vllm.md](docs/claude-vllm.md), including why routing this
through mcpctl would add surface without adding capability.
## Declarative Configuration
Everything can be defined in YAML and applied with `mcpctl apply`:
@@ -319,7 +397,7 @@ name: home-automation
proxyModel: default
servers:
- home-assistant
- node-red
- unifi-network
```
Via CLI: