feat(agents): smoke tests + README + docs (Stage 6, final)
Closes the agents feature. Smoke tests (run via `pnpm test:smoke` against a live mcpd at $MCPD_URL, default https://mcpctl.ad.itaz.eu): * tests/smoke/agent.smoke.test.ts — full CRUD round-trip: create secret + Llm + agent with sampling defaults; `get agents` surfaces it; `get agent foo -o yaml | apply -f` round-trips identically; create + list a thread via the HTTP API; agent delete leaves Llm + secret intact (Restrict + SetNull as designed). Self- skips with a warning when /healthz is unreachable. * tests/smoke/agent-chat.smoke.test.ts — gated on MCPCTL_SMOKE_LLM_URL + MCPCTL_SMOKE_LLM_KEY. Provisions secret + Llm + agent against a real upstream, runs `mcpctl chat -m … --no- stream` (asserts a reply lands), then runs the streaming default (asserts text on stdout + `(thread: …)` on stderr). The fast path for verifying the in-cluster qwen3-thinking deployment: MCPCTL_SMOKE_LLM_URL=http://litellm.nvidia-nim.svc.cluster.local:4000/v1 \ MCPCTL_SMOKE_LLM_MODEL=qwen3-thinking \ MCPCTL_SMOKE_LLM_KEY=$(pulumi config get --stack homelab \ secrets:litellmMcpctlGatewayToken) \ pnpm test:smoke Docs: * README.md — new "Agents" section under Resources with the qwen3-thinking quickstart and links to docs/agents.md and docs/chat.md. Adds llm + agent rows to the resources table. * docs/agents.md (new) — full reference: data model, chat-parameter table, HTTP API, RBAC mapping, tool-use loop semantics, yaml round-trip shorthand, the kubernetes-deployment wiring recipe, and a troubleshooting section (namespace collision, llm-in-use, pending-row recovery, Anthropic-tool limitation). * docs/chat.md (new) — user-facing `mcpctl chat` walkthrough: modes, per-call flags, slash-commands, threads, and a troubleshooting section. * CLAUDE.md — adds a "Resource types" cheatsheet with one-line pointers to each, including the new `agent` row that links to the docs. All suites still green: mcpd 759/759, mcplocal 715/715, cli 430/430. Smoke tests typecheck and self-skip when no live mcpd is reachable. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
47
README.md
47
README.md
@@ -494,11 +494,58 @@ new FileCache('ns', { maxSize: '10%' }) // 10% of partition
|
||||
| **secret** | Key-value credentials | API tokens, passwords |
|
||||
| **template** | Reusable server blueprint | Community server configs |
|
||||
| **project** | Workspace grouping servers | "monitoring", "home-automation" |
|
||||
| **llm** | Server-managed LLM provider | OpenAI / Anthropic / vLLM endpoint + key |
|
||||
| **agent** | LLM persona pinned to one Llm | "I review security; ask after each major change" |
|
||||
| **prompt** | Curated content for Claude | Instructions, docs, guides |
|
||||
| **promptrequest** | Pending prompt proposal | LLM-submitted, needs approval |
|
||||
| **rbac** | Access control bindings | Who can do what |
|
||||
| **serverattachment** | Server-to-project link | Virtual resource for `apply` |
|
||||
|
||||
## Agents
|
||||
|
||||
An **Agent** is an LLM persona — a pinned `Llm`, a system prompt, an optional
|
||||
project attach, and LiteLLM-style sampling defaults. Once attached to a
|
||||
project, the agent inherits the project's prompts (merged into its system
|
||||
block, sorted by priority) and gets to call the project's MCP servers as
|
||||
tools during chat.
|
||||
|
||||
Every agent is also exposed back to MCP clients as a virtual server named
|
||||
`agent-<name>` with one tool `chat`. So another Claude session connecting to
|
||||
the same project sees, e.g., `agent-reviewer/chat` in `tools/list` with the
|
||||
description "I review security design — ask me after each major change."
|
||||
That's how agents consult each other.
|
||||
|
||||
```bash
|
||||
# 1) point at an LLM. For your in-cluster qwen3-thinking via LiteLLM:
|
||||
mcpctl create secret litellm-key --data API_KEY=sk-…
|
||||
mcpctl create llm qwen3-thinking \
|
||||
--type openai \
|
||||
--model qwen3-thinking \
|
||||
--url http://litellm.nvidia-nim.svc.cluster.local:4000/v1 \
|
||||
--api-key-ref litellm-key/API_KEY
|
||||
|
||||
# 2) create an agent, pinned to that Llm and attached to a project
|
||||
mcpctl create agent reviewer \
|
||||
--llm qwen3-thinking \
|
||||
--project mcpctl-dev \
|
||||
--description "I review security design — ask me after each major change." \
|
||||
--system-prompt-file ./prompts/reviewer.md \
|
||||
--default-temperature 0.2 --default-max-tokens 4096
|
||||
|
||||
# 3) chat with it (interactive REPL — Ctrl-D to exit)
|
||||
mcpctl chat reviewer
|
||||
|
||||
# Or one-shot
|
||||
mcpctl chat reviewer -m "Look at PR #42 and tell me what's risky."
|
||||
|
||||
# Resume a thread
|
||||
mcpctl get threads --agent reviewer
|
||||
mcpctl chat reviewer --thread <id>
|
||||
```
|
||||
|
||||
Full reference: [docs/agents.md](docs/agents.md). User-facing chat guide:
|
||||
[docs/chat.md](docs/chat.md).
|
||||
|
||||
## Commands
|
||||
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user