From e7ee346f253e75abfdb4264d3e3edfb6aba7869c Mon Sep 17 00:00:00 2001 From: Sergei Aronsen Date: Sat, 30 May 2026 23:41:58 +0200 Subject: [PATCH 1/2] feat(integrations): add Higgsfield CLI + MCP, reconcile catalog counts Add Higgsfield AI to the integrations catalog (Design category): the official hosted MCP server (`https://mcp.higgsfield.ai/mcp`, browser OAuth, no API key) and its companion CLI `@higgsfield/cli`. CLI key matches the MCP name so MCP_HAS_CLI auto-links them. Also reconcile the integrations-count drift across docs: INTEGRATIONS.md, README.md, and all 9 translated READMEs carried four different stale figures (21/23/24/27). Catalog now ships 31 MCP + 10 CLI across 10 categories; every doc reflects that. INTEGRATIONS.md tables gain the 9 entries they were previously missing (comet-bridge, dbhub, datadog, github, mailgun, posthog, serena, claude-context, repomix). Release v6.53.0: manifest + 9 installer TK_TOOLKIT_REF pins bumped in lockstep (REL-03 green); test-integrations-tui.sh row counts 30 -> 31. Co-Authored-By: Claude Opus 4.8 (1M context) --- CHANGELOG.md | 39 ++++++++++++++++++++++++++ README.md | 4 +-- docs/INTEGRATIONS.md | 12 +++++++- docs/readme/de.md | 4 +-- docs/readme/es.md | 4 +-- docs/readme/fr.md | 4 +-- docs/readme/ja.md | 4 +-- docs/readme/ko.md | 4 +-- docs/readme/pt.md | 4 +-- docs/readme/ru.md | 4 +-- docs/readme/zh.md | 4 +-- manifest.json | 6 ++-- scripts/init-claude.sh | 2 +- scripts/install-statusline.sh | 2 +- scripts/install.sh | 2 +- scripts/lib/integrations-catalog.json | 23 +++++++++++++++ scripts/migrate-to-complement.sh | 2 +- scripts/setup-council.sh | 2 +- scripts/setup-prompt-engineer.sh | 2 +- scripts/setup-security.sh | 2 +- scripts/tests/test-integrations-tui.sh | 6 ++-- scripts/uninstall.sh | 2 +- scripts/update-claude.sh | 2 +- 23 files changed, 106 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7188684..de57cdee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,45 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [6.53.0] - 2026-05-30 + +Higgsfield AI joins the integrations catalog as a Design-category entry — +both the official hosted MCP server and its companion CLI. Higgsfield is an +AI image + video generation platform (30+ models: Nano Banana, FLUX.2, Veo, +Kling, etc.). The MCP is a hosted remote endpoint authenticated by browser +OAuth against a Higgsfield account — no API key, no env vars. + +This release also reconciles the integrations-count drift that had +accumulated across the docs: `INTEGRATIONS.md`, the English `README.md`, and +all 9 translated READMEs each carried a different stale figure (21 / 23 / 24 +/ 27). The catalog now ships **31 MCP servers + 10 companion CLIs across 10 +categories**, and every doc reflects that number. + +### Added + +- **`scripts/lib/integrations-catalog.json` — `higgsfield` MCP entry** + (Design category). Hosted remote transport: + `--transport http higgsfield https://mcp.higgsfield.ai/mcp`, + `requires_oauth: true`, `default_scope: user`, no `env_var_keys`. +- **`scripts/lib/integrations-catalog.json` — `higgsfield` companion CLI** + (`@higgsfield/cli`). `detect_cmd: higgsfield`; install darwin + `brew install higgsfield-ai/tap/higgsfield`, linux + `npm install -g @higgsfield/cli@latest`; post-install hint + `higgsfield auth login`. CLI key matches the MCP name, so `MCP_HAS_CLI` + auto-links it for `--cli-only` / `--mcp-only` selection. +- **`docs/INTEGRATIONS.md`** — Higgsfield row in the Design table, plus the + 9 catalog entries previously missing from the reference tables + (comet-bridge, dbhub, datadog, github, mailgun, posthog, serena, + claude-context, repomix). + +### Changed + +- **Integrations counts reconciled to 31 MCP + 10 CLI across 10 categories** + in `docs/INTEGRATIONS.md`, `README.md`, and + `docs/readme/{de,es,fr,ja,ko,pt,ru,zh}.md`. +- **`scripts/tests/test-integrations-tui.sh`** — A3 row-count assertions + bumped 30 → 31. + ## [6.52.0] - 2026-05-21 Skills picker UX: every row in the install-time TUI now shows the upstream diff --git a/README.md b/README.md index eaf0644d..70d940f2 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ A thin overlay on top of [**Superpowers**](https://github.com/obra/superpowers) | **Cost routing** | `better-model` routes simple tasks to cheaper models. Auto-installed and integrated into the install lifecycle. | | **Symbol-aware code search** | [Serena](https://github.com/oraios/serena) (LSP, MIT, local) + ripgrep + claude-context (semantic vector). Default Layer-3 search stack. | | **Multi-CLI bridges** | Auto-sync `CLAUDE.md` to `GEMINI.md` (Gemini CLI) and `AGENTS.md` (OpenAI Codex). Drift-detection at every install. | -| **Integrations catalog** | TUI installer for 24 MCP servers + 8 companion CLIs across 10 categories (Backend / Payments / Workspace / Project Management / …). Per-row scope. | +| **Integrations catalog** | TUI installer for 31 MCP servers + 10 companion CLIs across 10 categories (Backend / Payments / Workspace / Project Management / …). Per-row scope. | | **Limit visibility (Pro/Max)** | Statusline shows session/weekly usage — you can see when you're about to hit the wall. | | **Dependency dashboard (v6.2)** | `/update-deps` — interactive TUI listing every tracked dependency (Layer 1/2/3) with installed-vs-latest. You pick what to update. | | **Post-install setup guide (v6.3)** | Generates a local HTML page (`/.claude/setup-guide.html`) with per-MCP API-key walkthroughs and per-component config — only sections for what you actually installed. | @@ -88,7 +88,7 @@ For solo founders / non-developer product builders: [docs/non-programmer-mode.md ## MCP server catalog -The `--integrations` flag (or `/integrations` after the first install) opens a TUI checklist with 27 servers across 10 categories. Pick only what your project needs — the rest stays untouched. +The `--integrations` flag (or `/integrations` after the first install) opens a TUI checklist with 31 servers across 10 categories. Pick only what your project needs — the rest stays untouched. | Category | Servers | |------------------------|----------------------------------------------------------------------------------------| diff --git a/docs/INTEGRATIONS.md b/docs/INTEGRATIONS.md index bd088c68..139e1219 100644 --- a/docs/INTEGRATIONS.md +++ b/docs/INTEGRATIONS.md @@ -1,6 +1,6 @@ # Integrations Catalog -The toolkit ships a curated catalog of **21 MCP servers** + **8 companion CLIs** across **10 categories**, installable via a single TUI page. +The toolkit ships a curated catalog of **31 MCP servers** + **10 companion CLIs** across **10 categories**, installable via a single TUI page. This page is the reference for what's in the catalog, how install works, what `unofficial` means, where the toolkit's responsibilities end, and where to file your own SDKs. @@ -22,6 +22,7 @@ Each row is one MCP entry. Some entries also ship a companion CLI (the official | Context7 | `@upstash/context7-mcp` | — | `CONTEXT7_API_KEY` | — | | Firecrawl | `firecrawl-mcp` | `firecrawl` | `FIRECRAWL_API_KEY` | — | | NotebookLM | `notebooklm-mcp` | — | OAuth (browser) | unofficial | +| Comet Research Bridge | `github:sergei-aronsen/Perplexity-Comet-MCP` | — | Perplexity Pro session | research via Perplexity Pro (no API cost); needs Comet browser — run `scripts/setup-comet.sh` first | ### Backend @@ -31,6 +32,7 @@ Each row is one MCP entry. Some entries also ship a companion CLI (the official | AWS Cost Explorer | `awslabs.cost-explorer-mcp-server@latest` | `aws` | `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_REGION` | shares `aws` CLI with CloudWatch Logs | | Cloudflare | `@cloudflare/mcp-server-cloudflare` | `wrangler` | `CLOUDFLARE_API_TOKEN` | — | | Supabase | `@supabase/mcp-server-supabase` | `supabase` | `SUPABASE_ACCESS_TOKEN` | — | +| DBHub | `@bytebase/dbhub` | — | `DSN` | multi-DB — Postgres, MySQL, MariaDB, MSSQL, SQLite (read-only) | ### Payments @@ -43,6 +45,7 @@ Each row is one MCP entry. Some entries also ship a companion CLI (the official | Entry | MCP package | Companion CLI | Auth | Notes | | ----- | ----------- | ------------- | ---- | ----- | | Resend | `@resend/mcp-send-email` | — | `RESEND_API_KEY` | — | +| Mailgun | `@mailgun/mcp-server` | — | `MAILGUN_API_KEY`, `MAILGUN_API_REGION` | send, validate, stats, suppressions | ### Workspace @@ -71,6 +74,7 @@ Each row is one MCP entry. Some entries also ship a companion CLI (the official | Entry | MCP package | Companion CLI | Auth | Notes | | ----- | ----------- | ------------- | ---- | ----- | | Figma | `figma-developer-mcp` | — | `FIGMA_API_KEY` | — | +| Higgsfield | HTTP `https://mcp.higgsfield.ai/mcp` | `higgsfield` | OAuth (browser) | official; image + video gen; user scope | ### Dev Tools @@ -79,12 +83,18 @@ Each row is one MCP entry. Some entries also ship a companion CLI (the official | Magic | `@21st-dev/magic` | — | `MAGIC_API_KEY` | — | | OpenRouter | `openrouter-mcp` | — | `OPENROUTER_API_KEY` | — | | Playwright | `@playwright/mcp` | `playwright` | — | — | +| GitHub | HTTP `https://api.githubcopilot.com/mcp/` | `gh` | OAuth or PAT | official remote — repos, PRs, issues, Actions, code search | +| Serena | `serena start-mcp-server` (uv tool) | — | — | LSP-driven symbol-aware code search/edit; needs `uv` | +| Claude Context | `@zilliz/claude-context-mcp@latest` | — | `MILVUS_TOKEN`, `OPENAI_API_KEY` | vector-DB semantic code search; for 100k+ LOC codebases | +| Repomix | `repomix@1.14.0` | — | — | pack local + remote repos into AI-friendly context | ### Monitoring | Entry | MCP package | Companion CLI | Auth | Notes | | ----- | ----------- | ------------- | ---- | ----- | | Sentry | `@sentry/mcp-server` | `sentry-cli` | `SENTRY_AUTH_TOKEN` | — | +| Datadog | HTTP `https://app.datadoghq.com/api/v2/mcp/sse` | — | OAuth (browser) | official remote — APM, infra metrics, logs, dashboards, incidents | +| PostHog | `mcp-remote → https://mcp.posthog.com/sse` | — | `POSTHOG_AUTH_HEADER` | product analytics, error tracking, feature flags, A/B | ## Installing integrations diff --git a/docs/readme/de.md b/docs/readme/de.md index ea975874..840b1ea1 100644 --- a/docs/readme/de.md +++ b/docs/readme/de.md @@ -27,7 +27,7 @@ Eine dünne Overlay-Schicht über [**Superpowers**](https://github.com/obra/supe | **Cost Routing** | `better-model` routet einfache Aufgaben an günstigere Modelle. Wird automatisch installiert und in den Install-Lifecycle integriert. | | **Symbol-aware Code-Suche** | [Serena](https://github.com/oraios/serena) (LSP, MIT, lokal) + ripgrep + claude-context (semantischer Vektor). Standard-Layer-3-Stack. | | **Multi-CLI-Bridges** | Auto-Sync von `CLAUDE.md` zu `GEMINI.md` (Gemini CLI) und `AGENTS.md` (OpenAI Codex). Drift-Detection bei jeder Installation. | -| **Integrations-Katalog** | TUI-Installer für 24 MCP-Server + 8 Companion-CLIs in 10 Kategorien (Backend / Payments / Workspace / Project Management / …). Per-Row-Scope. | +| **Integrations-Katalog** | TUI-Installer für 31 MCP-Server + 10 Companion-CLIs in 10 Kategorien (Backend / Payments / Workspace / Project Management / …). Per-Row-Scope. | | **Limit-Sichtbarkeit (Pro/Max)** | Statusline zeigt Session/Weekly Usage — du siehst, wann du gegen die Wand läufst. | | **Dependency-Dashboard (v6.2)** | `/update-deps` — interaktives TUI mit allen getrackten Abhängigkeiten (Layer 1/2/3) plus installed-vs-latest. Du wählst, was aktualisiert wird. | | **Post-Install-Setup-Guide (v6.3)** | Erzeugt eine lokale HTML-Seite (`.claude/setup-guide.html`) mit MCP-API-Key-Walkthroughs und Komponenten-Konfiguration — nur für tatsächlich Installiertes. | @@ -79,7 +79,7 @@ Für Solo-Gründer / Nicht-Entwickler: [docs/non-programmer-mode.md](../non-prog ## MCP-Server-Katalog -Das Flag `--integrations` (oder `/integrations` nach der ersten Installation) öffnet eine TUI-Checkliste mit 24 Servern in 10 Kategorien. Du wählst nur, was dein Projekt braucht. +Das Flag `--integrations` (oder `/integrations` nach der ersten Installation) öffnet eine TUI-Checkliste mit 31 Servern in 10 Kategorien. Du wählst nur, was dein Projekt braucht. | Kategorie | Server | |------------------------|----------------------------------------------------------------------------------------| diff --git a/docs/readme/es.md b/docs/readme/es.md index e2567e9b..38212f3c 100644 --- a/docs/readme/es.md +++ b/docs/readme/es.md @@ -27,7 +27,7 @@ Una capa fina sobre [**Superpowers**](https://github.com/obra/superpowers) (brai | **Cost routing** | `better-model` enruta tareas simples a modelos más baratos. Auto-instalado e integrado en el ciclo de vida de la instalación. | | **Búsqueda de código por símbolos** | [Serena](https://github.com/oraios/serena) (LSP, MIT, local) + ripgrep + claude-context (vector semántico). Stack Layer-3 por defecto. | | **Multi-CLI bridges** | Auto-sincroniza `CLAUDE.md` con `GEMINI.md` (Gemini CLI) y `AGENTS.md` (OpenAI Codex). Detección de drift en cada instalación. | -| **Catálogo de integraciones** | Instalador TUI para 24 servidores MCP + 8 CLIs complementarios en 10 categorías (Backend / Pagos / Workspace / Project Management / …). Scope por fila. | +| **Catálogo de integraciones** | Instalador TUI para 31 servidores MCP + 10 CLIs complementarios en 10 categorías (Backend / Pagos / Workspace / Project Management / …). Scope por fila. | | **Visibilidad de límites (Pro/Max)** | La statusline muestra el uso por sesión/semanal — ves cuándo te vas a chocar contra el muro. | | **Dashboard de dependencias (v6.2)** | `/update-deps` — TUI interactivo que lista cada dependencia rastreada (Layer 1/2/3) con installed-vs-latest. Eliges qué actualizar. | | **Guía post-install (v6.3)** | Genera una página HTML local (`.claude/setup-guide.html`) con tutorial por MCP (API-key) y por componente — solo secciones para lo que instalaste. | @@ -79,7 +79,7 @@ Para fundadores en solitario / no-desarrolladores: [docs/non-programmer-mode.md] ## Catálogo de servidores MCP -El flag `--integrations` (o `/integrations` después de la primera instalación) abre una checklist TUI con 24 servidores en 10 categorías. Eliges solo lo que tu proyecto necesita. +El flag `--integrations` (o `/integrations` después de la primera instalación) abre una checklist TUI con 31 servidores en 10 categorías. Eliges solo lo que tu proyecto necesita. | Categoría | Servidores | |------------------------|----------------------------------------------------------------------------------------| diff --git a/docs/readme/fr.md b/docs/readme/fr.md index a10dc825..5bc17188 100644 --- a/docs/readme/fr.md +++ b/docs/readme/fr.md @@ -27,7 +27,7 @@ Une couche fine au-dessus de [**Superpowers**](https://github.com/obra/superpowe | **Cost routing** | `better-model` route les tâches simples vers les modèles moins chers. Auto-installé et intégré dans le cycle de vie de l'install. | | **Recherche de code par symbole** | [Serena](https://github.com/oraios/serena) (LSP, MIT, local) + ripgrep + claude-context (vecteur sémantique). Stack Layer-3 par défaut. | | **Multi-CLI bridges** | Auto-sync de `CLAUDE.md` vers `GEMINI.md` (Gemini CLI) et `AGENTS.md` (OpenAI Codex). Détection de drift à chaque install. | -| **Catalogue d'intégrations** | Installeur TUI pour 24 serveurs MCP + 8 CLIs compagnons en 10 catégories (Backend / Payments / Workspace / Project Management / …). Scope par ligne. | +| **Catalogue d'intégrations** | Installeur TUI pour 31 serveurs MCP + 10 CLIs compagnons en 10 catégories (Backend / Payments / Workspace / Project Management / …). Scope par ligne. | | **Visibilité des limites (Pro/Max)** | La statusline affiche l'usage session/hebdo — tu vois quand tu vas taper le mur. | | **Dashboard de dépendances (v6.2)** | `/update-deps` — TUI interactif listant chaque dépendance suivie (Layer 1/2/3) avec installed-vs-latest. Tu choisis quoi mettre à jour. | | **Guide post-install (v6.3)** | Génère une page HTML locale (`.claude/setup-guide.html`) avec walkthrough par MCP (clé API) et par composant — uniquement pour ce qui est installé. | @@ -79,7 +79,7 @@ Pour les founders solos / non-développeurs : [docs/non-programmer-mode.md](../n ## Catalogue de serveurs MCP -Le flag `--integrations` (ou `/integrations` après la première install) ouvre une checklist TUI avec 24 serveurs en 10 catégories. Tu prends seulement ce dont ton projet a besoin. +Le flag `--integrations` (ou `/integrations` après la première install) ouvre une checklist TUI avec 31 serveurs en 10 catégories. Tu prends seulement ce dont ton projet a besoin. | Catégorie | Serveurs | |------------------------|----------------------------------------------------------------------------------------| diff --git a/docs/readme/ja.md b/docs/readme/ja.md index c1c4c597..a6aaf7d7 100644 --- a/docs/readme/ja.md +++ b/docs/readme/ja.md @@ -27,7 +27,7 @@ | **コストルーティング** | `better-model` が単純なタスクをより安いモデルに振り分け。自動インストールされ、インストールライフサイクルに統合される。 | | **シンボル対応のコード検索** | [Serena](https://github.com/oraios/serena)(LSP、MIT、ローカル)+ ripgrep + claude-context(セマンティックベクトル)。デフォルトの Layer-3 スタック。 | | **マルチ CLI ブリッジ** | `CLAUDE.md` を `GEMINI.md`(Gemini CLI)と `AGENTS.md`(OpenAI Codex)に自動同期。インストールごとにドリフト検出。 | -| **インテグレーションカタログ** | TUI インストーラで 24 個の MCP サーバー + 8 個のコンパニオン CLI を 10 カテゴリ(Backend / Payments / Workspace / Project Management / …)から選択可能。行ごとに scope。 | +| **インテグレーションカタログ** | TUI インストーラで 31 個の MCP サーバー + 10 個のコンパニオン CLI を 10 カテゴリ(Backend / Payments / Workspace / Project Management / …)から選択可能。行ごとに scope。 | | **上限の可視化(Pro/Max)** | Statusline がセッション/週次の使用量を表示 —— 壁にぶつかる前に分かる。 | | **依存ダッシュボード(v6.2)** | `/update-deps` —— 追跡中の依存(Layer 1/2/3)を installed-vs-latest と一緒にすべて並べる対話的 TUI。何を更新するかは自分で選ぶ。 | | **インストール後ガイド(v6.3)** | ローカルの HTML ページ(`.claude/setup-guide.html`)を生成。MCP ごとの API キー手順とコンポーネント設定が並ぶ —— 実際にインストールしたものだけ。 | @@ -79,7 +79,7 @@ Toolkit v6.2 は **薄いオーバーレイ** で、三層に整理されてい ## MCP サーバーカタログ -`--integrations` フラグ(または初回インストール後の `/integrations`)で、24 個のサーバーを 10 カテゴリ別に並べた TUI チェックリストが開きます。プロジェクトに必要なものだけを取ります。 +`--integrations` フラグ(または初回インストール後の `/integrations`)で、31 個のサーバーを 10 カテゴリ別に並べた TUI チェックリストが開きます。プロジェクトに必要なものだけを取ります。 | カテゴリ | サーバー | |-------------------------|----------------------------------------------------------------------------------------| diff --git a/docs/readme/ko.md b/docs/readme/ko.md index f4a92a39..e7526735 100644 --- a/docs/readme/ko.md +++ b/docs/readme/ko.md @@ -27,7 +27,7 @@ | **Cost routing** | `better-model`이 단순 작업을 더 싼 모델로 라우팅. 자동 설치되며 인스톨 라이프사이클에 통합. | | **심볼 인식 코드 검색** | [Serena](https://github.com/oraios/serena)(LSP, MIT, 로컬) + ripgrep + claude-context(시맨틱 벡터). 기본 Layer-3 검색 스택. | | **Multi-CLI 브릿지** | `CLAUDE.md`를 `GEMINI.md`(Gemini CLI)와 `AGENTS.md`(OpenAI Codex)에 자동 동기화. 매 설치마다 드리프트 감지. | -| **통합 카탈로그** | TUI 인스톨러가 24개 MCP 서버 + 8개 동반 CLI를 10개 카테고리(Backend / Payments / Workspace / Project Management / …)에서 제공. 행마다 scope 선택. | +| **통합 카탈로그** | TUI 인스톨러가 31개 MCP 서버 + 10개 동반 CLI를 10개 카테고리(Backend / Payments / Workspace / Project Management / …)에서 제공. 행마다 scope 선택. | | **한도 가시성(Pro/Max)** | 스테이터스라인이 세션/주간 사용량을 보여줌 —— 벽에 부딪히기 전에 보임. | | **의존성 대시보드(v6.2)** | `/update-deps` —— 추적 중인 모든 의존성(Layer 1/2/3)을 installed-vs-latest와 함께 늘어놓는 대화형 TUI. 무엇을 업데이트할지 직접 선택. | | **설치 후 가이드(v6.3)** | 로컬 HTML 페이지(`.claude/setup-guide.html`) 생성 —— 설치된 MCP의 API 키 워크스루와 컴포넌트 설정만 표시. | @@ -79,7 +79,7 @@ Toolkit v6.2는 **얇은 오버레이**이며 3층으로 구성됩니다: ## MCP 서버 카탈로그 -`--integrations` 플래그(또는 첫 설치 후 `/integrations`)가 24개 서버를 10개 카테고리로 보여주는 TUI 체크리스트를 엽니다. 프로젝트에 필요한 것만 고르면 됩니다. +`--integrations` 플래그(또는 첫 설치 후 `/integrations`)가 31개 서버를 10개 카테고리로 보여주는 TUI 체크리스트를 엽니다. 프로젝트에 필요한 것만 고르면 됩니다. | 카테고리 | 서버 | |-------------------------|---------------------------------------------------------------------------------------| diff --git a/docs/readme/pt.md b/docs/readme/pt.md index 81fd71ee..5d04fd93 100644 --- a/docs/readme/pt.md +++ b/docs/readme/pt.md @@ -27,7 +27,7 @@ Uma camada fina sobre [**Superpowers**](https://github.com/obra/superpowers) (br | **Cost routing** | `better-model` roteia tarefas simples para modelos mais baratos. Auto-instalado e integrado no ciclo de vida da instalação. | | **Busca de código por símbolos** | [Serena](https://github.com/oraios/serena) (LSP, MIT, local) + ripgrep + claude-context (vetor semântico). Stack Layer-3 padrão. | | **Multi-CLI bridges** | Auto-sync de `CLAUDE.md` para `GEMINI.md` (Gemini CLI) e `AGENTS.md` (OpenAI Codex). Detecção de drift em cada instalação. | -| **Catálogo de integrações** | Instalador TUI para 24 servidores MCP + 8 CLIs companion em 10 categorias (Backend / Payments / Workspace / Project Management / …). Scope por linha. | +| **Catálogo de integrações** | Instalador TUI para 31 servidores MCP + 10 CLIs companion em 10 categorias (Backend / Payments / Workspace / Project Management / …). Scope por linha. | | **Visibilidade de limites (Pro/Max)** | A statusline mostra uso por sessão/semana — você vê quando vai bater no muro. | | **Dashboard de dependências (v6.2)** | `/update-deps` — TUI interativo listando cada dependência rastreada (Layer 1/2/3) com installed-vs-latest. Você escolhe o que atualizar. | | **Guia pós-instalação (v6.3)** | Gera uma página HTML local (`.claude/setup-guide.html`) com walkthrough por MCP (chave API) e por componente — só seções para o que está instalado. | @@ -79,7 +79,7 @@ Para founders solos / não-desenvolvedores: [docs/non-programmer-mode.md](../non ## Catálogo de servidores MCP -O flag `--integrations` (ou `/integrations` depois da primeira instalação) abre um checklist TUI com 24 servidores em 10 categorias. Você pega só o que o projeto precisa. +O flag `--integrations` (ou `/integrations` depois da primeira instalação) abre um checklist TUI com 31 servidores em 10 categorias. Você pega só o que o projeto precisa. | Categoria | Servidores | |------------------------|----------------------------------------------------------------------------------------| diff --git a/docs/readme/ru.md b/docs/readme/ru.md index b9d1b38f..eefb39b6 100644 --- a/docs/readme/ru.md +++ b/docs/readme/ru.md @@ -27,7 +27,7 @@ | **Cost routing** | `better-model` маршрутизирует простые задачи на дешёвые модели. Авто-устанавливается и интегрируется в lifecycle. | | **Symbol-aware поиск кода** | [Serena](https://github.com/oraios/serena) (LSP, MIT, локально) + ripgrep + claude-context (семантический вектор). Дефолтный Layer-3 поиск. | | **Multi-CLI bridges** | Авто-синхронизация `CLAUDE.md` в `GEMINI.md` (Gemini CLI) и `AGENTS.md` (OpenAI Codex). Drift-detection при каждой установке. | -| **Каталог интеграций** | TUI-установщик для 23 MCP-серверов + 8 companion CLI в 10 категориях (Backend / Payments / Workspace / Project Management / …). Скоуп per-row. | +| **Каталог интеграций** | TUI-установщик для 31 MCP-серверов + 10 companion CLI в 10 категориях (Backend / Payments / Workspace / Project Management / …). Скоуп per-row. | | **Видимость лимитов (Pro/Max)** | Statusline показывает session/weekly usage — видно, когда упрёшься в стену. | | **Дашборд зависимостей (v6.2)** | `/update-deps` — интерактивный TUI со всеми отслеживаемыми зависимостями (Layer 1/2/3) и сравнением installed-vs-latest. Вы выбираете, что обновлять. | @@ -77,7 +77,7 @@ Toolkit v6.2 — это **тонкий overlay**, организованный ## Каталог MCP-серверов -Установщик `--integrations` (или `/integrations` после первой установки) показывает TUI-чеклист с 24 серверами в 10 категориях. Берёте только то, что нужно проекту — остальное не трогается. +Установщик `--integrations` (или `/integrations` после первой установки) показывает TUI-чеклист с 31 серверами в 10 категориях. Берёте только то, что нужно проекту — остальное не трогается. | Категория | Серверы | |------------------------|----------------------------------------------------------------------------------------| diff --git a/docs/readme/zh.md b/docs/readme/zh.md index a59c435a..c9d52f70 100644 --- a/docs/readme/zh.md +++ b/docs/readme/zh.md @@ -27,7 +27,7 @@ | **成本路由** | `better-model` 把简单任务路由到更便宜的模型。自动安装并集成进安装生命周期。 | | **基于符号的代码搜索** | [Serena](https://github.com/oraios/serena)(LSP,MIT,本地)+ ripgrep + claude-context(语义向量)。默认 Layer-3 检索栈。 | | **多 CLI 桥接** | 自动同步 `CLAUDE.md` 到 `GEMINI.md`(Gemini CLI)和 `AGENTS.md`(OpenAI Codex)。每次安装做漂移检测。 | -| **集成目录** | TUI 安装器,覆盖 24 个 MCP 服务器 + 8 个配套 CLI,分 10 个类别(Backend / Payments / Workspace / Project Management / …)。每行可选 scope。 | +| **集成目录** | TUI 安装器,覆盖 31 个 MCP 服务器 + 10 个配套 CLI,分 10 个类别(Backend / Payments / Workspace / Project Management / …)。每行可选 scope。 | | **额度可见性(Pro/Max)** | Statusline 显示会话/周用量 —— 你能看到什么时候要撞墙。 | | **依赖看板(v6.2)** | `/update-deps` —— 交互式 TUI 列出所有被追踪的依赖(Layer 1/2/3)和 installed-vs-latest。你挑选要更新的项。 | | **安装后引导(v6.3)** | 生成本地 HTML 页面 (`.claude/setup-guide.html`),包含每个 MCP 的 API key 上手和组件配置 —— 只列你实际安装了的部分。 | @@ -79,7 +79,7 @@ Toolkit v6.2 是一个**薄层覆盖**,分三层: ## MCP 服务器目录 -`--integrations` flag(或首次安装后用 `/integrations`)打开一个 TUI 检查列表,含 24 个服务器,分 10 类。你只挑项目需要的。 +`--integrations` flag(或首次安装后用 `/integrations`)打开一个 TUI 检查列表,含 31 个服务器,分 10 类。你只挑项目需要的。 | 类别 | 服务器 | |------------------------|----------------------------------------------------------------------------------------| diff --git a/manifest.json b/manifest.json index fd70e6b4..ffc88244 100644 --- a/manifest.json +++ b/manifest.json @@ -1,8 +1,8 @@ { "manifest_version": 2, - "version": "6.52.0", - "updated": "2026-05-21", - "build_date": "2026-05-21", + "version": "6.53.0", + "updated": "2026-05-30", + "build_date": "2026-05-30", "description": "Claude Code Toolkit manifest for smart updates", "vendor_pins_note": "Pinned commits/tags of external vendors as of the toolkit release. Used by /vendor-changelog to diff vendor HEAD against these pins and surface BREAKING/ADOPT/IGNORE/DEPRECATE classifications. Updated manually by the maintainer post-release via scripts/vendor/pin-vendors.sh.", "vendor_pins": { diff --git a/scripts/init-claude.sh b/scripts/init-claude.sh index 5ae362df..a2edd14b 100755 --- a/scripts/init-claude.sh +++ b/scripts/init-claude.sh @@ -35,7 +35,7 @@ NC='\033[0m' # `raw.githubusercontent.com/.../v6.24.5/.../init-claude.sh`), leave # TK_TOOLKIT_REF unset and it inherits the bundled default below — # guaranteeing every file in the install comes from the same tag. -TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.52.0}" +TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.53.0}" # Audit INF-MED-2 (2026-04-30 deep): allowlist guard — TK_TOOLKIT_REF flows # raw into curl URLs. Reject anything outside the tag/SHA charset, plus any # `..` traversal sequence. Tags / branches / SHAs do not contain `..`. diff --git a/scripts/install-statusline.sh b/scripts/install-statusline.sh index a67de44c..35a6c368 100755 --- a/scripts/install-statusline.sh +++ b/scripts/install-statusline.sh @@ -33,7 +33,7 @@ done : "${YES}" # silence shellcheck SC2034 — no-op stub today # Audit H5: TK_TOOLKIT_REF pins to a tag/SHA (default `main`). -TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.52.0}" +TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.53.0}" # Audit INF-MED-2 (2026-04-30 deep): allowlist guard — TK_TOOLKIT_REF flows # raw into curl URLs. Reject anything outside the tag/SHA charset, plus any # `..` traversal sequence. Tags / branches / SHAs do not contain `..`. diff --git a/scripts/install.sh b/scripts/install.sh index 4859df75..3c1ff187 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -40,7 +40,7 @@ export TK_TOOLKIT_REF TK_USER_AGENT # Config # Audit H5: TK_TOOLKIT_REF pins to a tag/SHA (default `main`); TK_REPO_URL # remains the highest-priority override (full URL with ref baked in). -TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.52.0}" +TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.53.0}" # Audit INF-MED-2 (2026-04-30 deep): allowlist guard — TK_TOOLKIT_REF flows # raw into curl URLs. Reject anything outside the tag/SHA charset, plus any # `..` traversal sequence. Tags / branches / SHAs do not contain `..`. diff --git a/scripts/lib/integrations-catalog.json b/scripts/lib/integrations-catalog.json index e33444fb..1ac9fa94 100644 --- a/scripts/lib/integrations-catalog.json +++ b/scripts/lib/integrations-catalog.json @@ -174,6 +174,21 @@ "requires_oauth": false, "default_scope": "user" }, + "higgsfield": { + "name": "higgsfield", + "display_name": "Higgsfield", + "category": "design", + "env_var_keys": [], + "install_args": [ + "--transport", + "http", + "higgsfield", + "https://mcp.higgsfield.ai/mcp" + ], + "description": "AI image + video generation — 30+ models (Nano Banana, FLUX.2, Veo, Kling). Hosted remote MCP, OAuth via Higgsfield account (no API key).", + "requires_oauth": true, + "default_scope": "user" + }, "firecrawl": { "name": "firecrawl", "display_name": "Firecrawl", @@ -588,6 +603,14 @@ }, "post_install_hint": "firecrawl --version # set FIRECRAWL_API_KEY env" }, + "higgsfield": { + "detect_cmd": "higgsfield", + "install": { + "darwin": "brew install higgsfield-ai/tap/higgsfield", + "linux": "npm install -g @higgsfield/cli@latest" + }, + "post_install_hint": "higgsfield auth login # device-code OAuth" + }, "github": { "detect_cmd": "gh", "install": { diff --git a/scripts/migrate-to-complement.sh b/scripts/migrate-to-complement.sh index fd737d4d..a57127a7 100755 --- a/scripts/migrate-to-complement.sh +++ b/scripts/migrate-to-complement.sh @@ -57,7 +57,7 @@ CYAN='\033[0;36m' NC='\033[0m' # Audit H5: TK_TOOLKIT_REF pins to a tag/SHA (default `main`). -TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.52.0}" +TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.53.0}" # Audit INF-MED-2 (2026-04-30 deep): allowlist guard — TK_TOOLKIT_REF flows # raw into curl URLs. Reject anything outside the tag/SHA charset, plus any # `..` traversal sequence. Tags / branches / SHAs do not contain `..`. diff --git a/scripts/setup-council.sh b/scripts/setup-council.sh index 06d7bd18..f0b628ed 100644 --- a/scripts/setup-council.sh +++ b/scripts/setup-council.sh @@ -16,7 +16,7 @@ CYAN='\033[0;36m' NC='\033[0m' # Audit H5: TK_TOOLKIT_REF pins to a tag/SHA (default `main`). -TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.52.0}" +TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.53.0}" # Audit INF-MED-2 (2026-04-30 deep): allowlist guard — TK_TOOLKIT_REF flows # raw into curl URLs. Reject anything outside the tag/SHA charset, plus any # `..` traversal sequence. Tags / branches / SHAs do not contain `..`. diff --git a/scripts/setup-prompt-engineer.sh b/scripts/setup-prompt-engineer.sh index f0978944..9509a331 100755 --- a/scripts/setup-prompt-engineer.sh +++ b/scripts/setup-prompt-engineer.sh @@ -18,7 +18,7 @@ NC='\033[0m' # TK_TOOLKIT_REF pins to a tag/SHA (default `main`). Mirrors setup-council.sh # to keep allowlist + curl conventions identical. -TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.52.0}" +TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.53.0}" if ! [[ "$TK_TOOLKIT_REF" =~ ^[A-Za-z0-9._/-]+$ ]] || [[ "$TK_TOOLKIT_REF" == *..* ]]; then echo "Error: TK_TOOLKIT_REF must match [A-Za-z0-9._/-]+ and must not contain '..' (got: $TK_TOOLKIT_REF)" >&2 exit 1 diff --git a/scripts/setup-security.sh b/scripts/setup-security.sh index 94c89215..fa5f2a30 100755 --- a/scripts/setup-security.sh +++ b/scripts/setup-security.sh @@ -46,7 +46,7 @@ done : "${YES}" # silence shellcheck SC2034 — YES consumed by future read blocks # Audit H5: TK_TOOLKIT_REF pins to a tag/SHA (default `main`). -TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.52.0}" +TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.53.0}" # Audit INF-MED-2 (2026-04-30 deep): allowlist guard — TK_TOOLKIT_REF flows # raw into curl URLs. Reject anything outside the tag/SHA charset, plus any # `..` traversal sequence. Tags / branches / SHAs do not contain `..`. diff --git a/scripts/tests/test-integrations-tui.sh b/scripts/tests/test-integrations-tui.sh index c018ed05..2bdcf80f 100755 --- a/scripts/tests/test-integrations-tui.sh +++ b/scripts/tests/test-integrations-tui.sh @@ -146,9 +146,9 @@ counts_out=$(TK_MCP_CLAUDE_BIN="$MOCK_CLAUDE" \ mcp_status_array echo \"labels=\${#TUI_LABELS[@]} groups=\${#TUI_GROUPS[@]} mcp=\${#MCP_NAMES[@]}\" " 2>&1) -assert_contains "labels=30" "$counts_out" "A3: TUI_LABELS has 30 rows" -assert_contains "groups=30" "$counts_out" "A3: TUI_GROUPS parallel-array has 30 rows" -assert_contains "mcp=30" "$counts_out" "A3: MCP_NAMES has 30 rows" +assert_contains "labels=31" "$counts_out" "A3: TUI_LABELS has 31 rows" +assert_contains "groups=31" "$counts_out" "A3: TUI_GROUPS parallel-array has 31 rows" +assert_contains "mcp=31" "$counts_out" "A3: MCP_NAMES has 31 rows" # ───────────────────────────────────────────────── # A4 — When mock claude reports `supabase`, MCP_STATUS[supabase]=installed and diff --git a/scripts/uninstall.sh b/scripts/uninstall.sh index 98979968..6c89f839 100755 --- a/scripts/uninstall.sh +++ b/scripts/uninstall.sh @@ -104,7 +104,7 @@ fi # ───────── constants + log helpers ───────── # Audit H5: TK_TOOLKIT_REF pins to a tag/SHA (default `main`). -TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.52.0}" +TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.53.0}" # Audit INF-MED-2 (2026-04-30 deep): allowlist guard — TK_TOOLKIT_REF flows # raw into curl URLs. Reject anything outside the tag/SHA charset, plus any # `..` traversal sequence. Tags / branches / SHAs do not contain `..`. diff --git a/scripts/update-claude.sh b/scripts/update-claude.sh index 285681f9..bec91990 100755 --- a/scripts/update-claude.sh +++ b/scripts/update-claude.sh @@ -73,7 +73,7 @@ CYAN='\033[0;36m' NC='\033[0m' # Audit H5: TK_TOOLKIT_REF pins to a tag/SHA (default `main`). -TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.52.0}" +TK_TOOLKIT_REF="${TK_TOOLKIT_REF:-v6.53.0}" # Audit INF-MED-2 (2026-04-30 deep): allowlist guard — TK_TOOLKIT_REF flows # raw into curl URLs. Reject anything outside the tag/SHA charset, plus any # `..` traversal sequence. Tags / branches / SHAs do not contain `..`. From 541d253f2eb51e7ab5286f85b7bf3ed936ca5c47 Mon Sep 17 00:00:00 2001 From: Sergei Aronsen Date: Sun, 31 May 2026 00:16:14 +0200 Subject: [PATCH 2/2] =?UTF-8?q?test:=20bump=20catalog=20count=20assertions?= =?UTF-8?q?=2030=E2=86=9231=20MCP=20/=209=E2=86=9210=20CLI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI 'Test Install Features' caught hardcoded catalog counts not exercised by local 'make check': test-mcp-selector (S1), test-mcp-catalog-load (T2/T4), test-integrations-catalog (A5/A8), test-catalog-serena (range). Higgsfield bumped the catalog to 31 MCP + 10 CLI. Co-Authored-By: Claude Opus 4.8 (1M context) --- scripts/tests/test-catalog-serena.sh | 4 ++-- scripts/tests/test-integrations-catalog.sh | 18 +++++++++--------- scripts/tests/test-mcp-catalog-load.sh | 20 ++++++++++---------- scripts/tests/test-mcp-selector.sh | 2 +- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/scripts/tests/test-catalog-serena.sh b/scripts/tests/test-catalog-serena.sh index 93a27dca..5ed287e0 100755 --- a/scripts/tests/test-catalog-serena.sh +++ b/scripts/tests/test-catalog-serena.sh @@ -80,8 +80,8 @@ fi # 8. Total mcp entry count unchanged (1-for-1 swap; was 23 in v6.0) total_mcps=$(jq '[.. | objects | select(has("name"))] | length' "$CATALOG") -if [ "$total_mcps" -ge 20 ] && [ "$total_mcps" -le 30 ]; then - report_pass "total mcp count sane: $total_mcps (expected 20–30)" +if [ "$total_mcps" -ge 20 ] && [ "$total_mcps" -le 40 ]; then + report_pass "total mcp count sane: $total_mcps (expected 20–40)" else report_fail "total mcp count out of band: $total_mcps" fi diff --git a/scripts/tests/test-integrations-catalog.sh b/scripts/tests/test-integrations-catalog.sh index 62978c14..1b405585 100755 --- a/scripts/tests/test-integrations-catalog.sh +++ b/scripts/tests/test-integrations-catalog.sh @@ -8,7 +8,7 @@ # 20 baseline + 1 = 21. Phase 33 math note: 21 - 1 (DROP-01 # sequential-thinking) + 0 = 20; Phase 40 INT-13 +1 = 21. # v6.1: morph-fast-tools replaced by serena 1-for-1 — count stays 23.) -# - components.cli has 9 entries +# - components.cli has 10 entries # - every MCP entry has the required keys # - every entry's category is in the top-level categories[] enum # - every CLI entry has detect_cmd + install.darwin + install.linux + post_install_hint @@ -113,7 +113,7 @@ else: ' # ───────────────────────────────────────────────── -# A5 — components.mcp has 30 entries +# A5 — components.mcp has 31 entries # (Phase 33 baseline: 21 - 1 DROP-01 = 20; Phase 40 INT-13 added Calendly = 21; # v6.0 INT-15 added morph-fast-tools + claude-context = 23; # v6.1: morph-fast-tools replaced by serena 1-for-1, count unchanged at 23. @@ -122,12 +122,12 @@ else: # v6.23 added repomix (full-repo pack for AI context, +1 = 29). # v6.24 added github (official remote MCP, +1 = 30).) # ───────────────────────────────────────────────── -_pyq "A5: components.mcp has exactly 30 entries" ' +_pyq "A5: components.mcp has exactly 31 entries" ' mcp = catalog.get("components", {}).get("mcp", {}) -if isinstance(mcp, dict) and len(mcp) == 30: +if isinstance(mcp, dict) and len(mcp) == 31: print("OK") else: - print("components.mcp count is " + str(len(mcp)) + ", expected 30") + print("components.mcp count is " + str(len(mcp)) + ", expected 31") ' # ───────────────────────────────────────────────── @@ -162,17 +162,17 @@ else: ' # ───────────────────────────────────────────────── -# A8 — components.cli has 9 entries (Phase 33 D-04 final composition: 5 +# A8 — components.cli has 10 entries (Phase 33 D-04 final composition: 5 # survivors with CLI value (firecrawl, playwright, sentry) + 5 added INT # CLIs (supabase, cloudflare, stripe, aws-cloudwatch-logs, aws-cost-explorer); # v6.24.0 added github = 9) # ───────────────────────────────────────────────── -_pyq "A8: components.cli has exactly 9 entries" ' +_pyq "A8: components.cli has exactly 10 entries" ' cli = catalog.get("components", {}).get("cli", {}) -if isinstance(cli, dict) and len(cli) == 9: +if isinstance(cli, dict) and len(cli) == 10: print("OK") else: - print("components.cli count is " + str(len(cli)) + ", expected 9") + print("components.cli count is " + str(len(cli)) + ", expected 10") ' # ───────────────────────────────────────────────── diff --git a/scripts/tests/test-mcp-catalog-load.sh b/scripts/tests/test-mcp-catalog-load.sh index cf422d4d..bc32eb47 100755 --- a/scripts/tests/test-mcp-catalog-load.sh +++ b/scripts/tests/test-mcp-catalog-load.sh @@ -3,9 +3,9 @@ # # Validates that scripts/lib/mcp.sh:mcp_catalog_load: # 1. Forks jq at most twice (was ~301 forks pre-fix; should be 1) -# 2. Returns exactly 30 entries from integrations-catalog.json +# 2. Returns exactly 31 entries from integrations-catalog.json # 3. Sorts MCP_NAMES alphabetically -# 4. Keeps all 10 parallel arrays at length 30 +# 4. Keeps all 10 parallel arrays at length 31 # 5. Correctly handles entries with EMPTY env_var_keys (calendly — the # regression vector that broke the earlier @tsv attempt: tab+tab # collapsed under whitespace IFS and shifted columns by one) @@ -82,11 +82,11 @@ rm -rf "$WRAPPER_DIR" source "$SCRIPT_DIR/scripts/lib/mcp.sh" mcp_catalog_load -# ----- T2: 30 entries ---------------------------------------------------- -if [[ "${#MCP_NAMES[@]}" -eq 30 ]]; then - _pass "T2 MCP_NAMES length = 30" +# ----- T2: 31 entries ---------------------------------------------------- +if [[ "${#MCP_NAMES[@]}" -eq 31 ]]; then + _pass "T2 MCP_NAMES length = 31" else - _fail "T2 MCP_NAMES length = ${#MCP_NAMES[@]}, expected 30" + _fail "T2 MCP_NAMES length = ${#MCP_NAMES[@]}, expected 31" fi # ----- T3: alphabetical order -------------------------------------------- @@ -99,15 +99,15 @@ else diff <(echo "$EXPECTED_ORDER") <(echo "$ACTUAL_ORDER") >&2 || true fi -# ----- T4: every parallel array has length 30 ---------------------------- +# ----- T4: every parallel array has length 31 ---------------------------- len=0 for arr in MCP_DISPLAY MCP_ENV_KEYS MCP_INSTALL_ARGS MCP_DESCS MCP_OAUTH \ MCP_CATEGORY MCP_HAS_CLI MCP_CLI_DETECT MCP_UNOFFICIAL MCP_DEFAULT_SCOPE; do eval "len=\${#${arr}[@]}" - if [[ "$len" -eq 30 ]]; then - _pass "T4 $arr length = 30" + if [[ "$len" -eq 31 ]]; then + _pass "T4 $arr length = 31" else - _fail "T4 $arr length = $len, expected 30" + _fail "T4 $arr length = $len, expected 31" fi done diff --git a/scripts/tests/test-mcp-selector.sh b/scripts/tests/test-mcp-selector.sh index 69912437..a4bf25f4 100755 --- a/scripts/tests/test-mcp-selector.sh +++ b/scripts/tests/test-mcp-selector.sh @@ -82,7 +82,7 @@ run_s1_catalog_correctness() { # v6.6 added comet-bridge (Pplx Pro research backend, +1 = 28). # v6.23 added repomix (full-repo pack for AI context, +1 = 29). # v6.24 added github (official remote MCP, +1 = 30). - assert_eq "30" "${#MCP_NAMES[@]}" "S1: catalog contains 30 entries" + assert_eq "31" "${#MCP_NAMES[@]}" "S1: catalog contains 31 entries" assert_eq "aws-cloudwatch-logs" "${MCP_NAMES[0]}" "S1: alphabetical first entry is aws-cloudwatch-logs" # Find notion index and verify requires_oauth = 1