2026-02-21 14:00:24 +00:00
|
|
|
name: mcpctl
|
2026-03-13 23:16:48 +00:00
|
|
|
arch: ${NFPM_ARCH}
|
2026-02-27 17:05:05 +00:00
|
|
|
version: 0.0.1
|
2026-02-21 14:00:24 +00:00
|
|
|
release: "1"
|
|
|
|
|
maintainer: michal
|
|
|
|
|
description: kubectl-like CLI for managing MCP servers
|
|
|
|
|
license: MIT
|
2026-02-23 19:23:21 +00:00
|
|
|
depends:
|
|
|
|
|
- jq
|
2026-02-21 14:00:24 +00:00
|
|
|
contents:
|
|
|
|
|
- src: ./dist/mcpctl
|
|
|
|
|
dst: /usr/bin/mcpctl
|
|
|
|
|
file_info:
|
|
|
|
|
mode: 0755
|
2026-02-22 22:24:35 +00:00
|
|
|
- src: ./dist/mcpctl-local
|
|
|
|
|
dst: /usr/bin/mcpctl-local
|
|
|
|
|
file_info:
|
|
|
|
|
mode: 0755
|
feat(claude): claude-vllm — run Claude Code against the homelab LLM gateway
The gateway at llm.ad.itaz.eu is LiteLLM in front of vLLM, and LiteLLM already
serves the Anthropic Messages API on /v1/messages — verified with a real
completion. So Claude Code needs no bridge: pointing ANTHROPIC_BASE_URL at it is
the whole integration.
`claude-vllm` exists only to stop you pasting four exports each time. It reuses
what another agent is already configured with — ~/.pi/agent, ~/.prime/agent, then
opencode's config, first hit wins — taking the base URL and the credential from
the same source so one gateway's URL is never paired with another's key.
Beyond the obvious ANTHROPIC_* vars it sets two that are easy to miss:
- ANTHROPIC_SMALL_FAST_MODEL / ANTHROPIC_DEFAULT_HAIKU_MODEL, or the
background and summarisation calls ask the gateway for a real Haiku it does
not serve and every one 404s;
- CLAUDE_CODE_MAX_CONTEXT_TOKENS from the provider's declared contextWindow,
because Claude Code assumes 200k for models it has no table for — and
deepseek-v4-* is 393k, so it would auto-compact at half capacity.
On `claude-mcpctl`: mcpctl's LLM layer is a client, not a server. mcpd serves
/api/v1/llms (management) and its adapters call out to providers for gating,
prompt selection and agent chat; nothing serves /v1/messages. Routing Claude
through mcpctl would mean adding an Anthropic-shaped passthrough that re-wraps
LiteLLM — worth doing only if mcpctl in the LLM path buys something of its own
(per-project gating of model calls, prompt audit, budgets), which is a mcpd
endpoint rather than a wrapper script.
Verified: `claude-vllm --model deepseek-v4-fast -- -p "..."` completes against
deepseek on the homelab, with the unknown-model context warning gone.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BVwuCjuMoA13gmzYEfcrNP
2026-08-09 18:39:36 +01:00
|
|
|
- src: ./stack/claude-vllm
|
|
|
|
|
dst: /usr/bin/claude-vllm
|
|
|
|
|
file_info:
|
|
|
|
|
mode: 0755
|
2026-02-22 22:24:35 +00:00
|
|
|
- src: ./deploy/mcplocal.service
|
|
|
|
|
dst: /usr/lib/systemd/user/mcplocal.service
|
|
|
|
|
file_info:
|
|
|
|
|
mode: 0644
|
feat: implement v2 3-tier architecture (mcpctl → mcplocal → mcpd)
- Rename local-proxy to mcplocal with HTTP server, LLM pipeline, mcpd discovery
- Add LLM pre-processing: token estimation, filter cache, metrics, Gemini CLI + DeepSeek providers
- Add mcpd auth (login/logout) and MCP proxy endpoints
- Update CLI: dual URLs (mcplocalUrl/mcpdUrl), auth commands, --direct flag
- Add tiered health monitoring, shell completions, e2e integration tests
- 57 test files, 597 tests passing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 11:42:06 +00:00
|
|
|
- src: ./completions/mcpctl.bash
|
|
|
|
|
dst: /usr/share/bash-completion/completions/mcpctl
|
|
|
|
|
file_info:
|
|
|
|
|
mode: 0644
|
|
|
|
|
- src: ./completions/mcpctl.fish
|
|
|
|
|
dst: /usr/share/fish/vendor_completions.d/mcpctl.fish
|
|
|
|
|
file_info:
|
|
|
|
|
mode: 0644
|