Cyanheads Mcp Server

io.github.cyanheads由 GitHub 帳號 cyanheads 發布v0.5.0更新於 Oct 29, 2026

Fleet discovery for the cyanheads MCP ecosystem — semantic search + install snippets.

已驗證Streamable HTTP可網頁執行知識與記憶開發者工具

概覽

AI 產生的概覽

cyanheads MCP 生態系的探索服務:讓助理以自然語言語意搜尋工具與伺服器,並取得安裝片段。

可以做什麼
  • 以自然語言描述搜尋 cyanheads 工具庫,可限定單一工具或整個伺服器範圍,回傳排序結果、相似度分數與伺服器彙總
  • 描述指定的工具或伺服器,取得說明、所屬伺服器、連線中繼資料與完整工具清單
  • 取得各用戶端適用的安裝片段(本機 npx/stdio,託管伺服器另有 HTTP)
  • 以位移量翻頁,並用回傳的 next 位移繼續搜尋
適用情境
適合讓助理協助挑選並接上其他 cyanheads MCP 伺服器來完成某項工作,而非直接完成工作本身。它只是目錄入口,若已確定需要哪個伺服器,幫助有限。
執行需求
可使用公開託管端點(免安裝),或以 npx 在本機執行(需要 Node.js);從原始碼建置需 Bun 1.4.0+ 或 Node.js 24+。本機首次啟動會下載 Hugging Face 嵌入模型(預設 Snowflake/snowflake-arctic-embed-m-v1.5),並需連網取得遠端 fleet.json 目錄。所有環境變數皆有預設值,驗證預設為 none。
安裝前請注意
目錄自遠端 URL 取得並每小時更新,結果取決於該第三方端點;CATALOG_URL 可指向其他工具庫。查詢文字會在本機以 Hugging Face 模型產生向量。選用的失敗酬載記錄(LOG_TOOL_FAILURE_PAYLOADS)會記下工具參數與結果,且自由文字中的密鑰不會被遮蔽。安裝片段為目錄文字,可能漏列選用環境變數。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Cyanheads Mcp Server,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.cyanheads%2Fcyanheads-mcp-server/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "cyanheads": {
      "type": "http",
      "url": "https://cyanheads.caseyjhand.com/mcp"
    }
  }
}

README

@cyanheads/cyanheads-mcp-server

Fleet discovery for the cyanheads MCP ecosystem — semantic search + install snippets.

2 Tools • 0 Resources • 0 Prompts

Public Hosted Server: https://cyanheads.caseyjhand.com/mcp


Overview

Find the right MCP tool for the job across the cyanheads fleet. Describe a task in plain language to search every tool and server, then get a description, connection URL, and install snippet for your client.

Tools

ToolDescription
cyanheads_search_catalogSearch fleet tools and servers by natural-language query. Returns ranked matches with brief summaries and the owning server.
cyanheads_describe_entryReturn the description, connection URL, and per-client install snippet for a named tool or server.

Skills

SkillDescription
cyanheads-guideFind a fleet server for a task and hand over a working install: telling real matches from near misses, the category filter, hosted vs local installs, and env vars the snippets leave out. Served over MCP as skill://cyanheads-guide/SKILL.md and loaded by Claude Code and Codex plugin installs.

Capability reference

cyanheads_search_catalog tool

  • query 1–500 raw characters, with non-whitespace text required; surrounding whitespace is trimmed before embedding and echo. scope selects tools (default) or servers; optional category: research, government, public-data, utility; limit 1–1000 (default 5), served at most 20 per call: when a larger limit leaves matches past the page, the response adds truncated, shown, cap, and a notice naming the offset to continue from.
  • Results carry cosine-similarity score ([0, 1], comparable within one response). Tool searches include a servers roll-up with ten entries per page and serversTotal; an unloaded catalog returns retryable catalog_empty.
  • Page results with offset and the tools-scope roll-up independently with serversOffset (both default to 0). Reuse the same query, scope, category, and limit with nextOffset / nextServersOffset; null means exhausted. Each call uses the current catalog, so a refresh between pages can change ordering. Servers scope requires serversOffset: 0 and omits roll-up fields.
  • SIMILARITY_FLOOR (default 0.3) filters matches before the limit applies.
  • An empty category string is treated as omitted; other unknown category values are rejected. Categories are catalog labels, not publisher types, and a wrong one drops the matching server without a notice unless nothing else matches.

cyanheads_describe_entry tool

  • name 1–64 characters accepts a tool or server name, auto-detected or pinned via kind. Exact names win, then unique case-insensitive names; output uses canonical names. client optionally selects claude-code, cline, codex, cursor, gemini, streamable-http (generic mcpServers JSON), or curl.
  • server (optional, 1–64 characters) names the owning server: a search result's name + server describes exactly that row, in either scope. It is required when more than one server owns the tool name; with a server name, it must name the same server.
  • Empty kind, client, and server strings are treated as omitted. Other unknown kind or client values are rejected.
  • Both kinds return connection metadata and install snippets; server results also include the full tool inventory. Published servers get local snippets; hosted servers also get HTTP snippets. For local-only entries, client: "curl" returns successful metadata with an installNotice naming a stdio client to try. Required environment variables remain visible even without snippets; they list what the server's manifest marks required, so a key it leaves optional is absent.
  • Descriptions are catalog text; obtain tool schemas from the connected server's tools/list.
  • Failures return not_found, ambiguous_kind (set kind), ambiguous_owner (set server; the error lists the owners), or retryable catalog_empty.

Features

Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.

Catalog-specific:

  • Hourly background catalog refresh (CATALOG_REFRESH_SECONDS, default 3600) with an atomic index swap when generatedAt changes — no restart needed
  • Empty catalogs, conflicting duplicate identities, and vectors that can't be normalized (wrong dimension, all zeros, or a non-finite component) fail before index replacement; refresh retains the last valid catalog. Identical duplicates collapse before indexing, with a bounded load-time warning; servers with no tools remain valid.
  • Query embeddings are computed at request time via @huggingface/transformers; document embeddings are pre-computed, L2-normalized, and Matryoshka-truncated, shipped inside fleet.json. The server normalizes each document vector again at load, so scores stay cosine similarities even when a catalog's vectors drift from unit length, and a bounded warning names vectors more than 1e-4 off.
  • The embedding model is warmed up during startup, before OpenTelemetry's HTTP instrumentation patches fetch — avoids a cold-cache model-load failure under OTEL
  • Self-describing: cyanheads_describe_entry resolves this server's own name and tools from a static fallback record, consulted only when the remote catalog doesn't carry an entry for it
  • CATALOG_URL can point at any endpoint serving the same schema, to front a custom fleet

Agent-friendly output:

  • Search responses echo the effective query, report the total match count before the limit, include broadening guidance when nothing matches, and name the offset to continue from when a limit above 20 is cut to the per-call cap
  • Discriminated result.kind (tool | server) on cyanheads_describe_entry lets callers branch on data, not string parsing
  • Every search result carries a score field for trust calibration, plus a servers roll-up so agents can see which servers matched without a second call

Getting started

Connect to the hosted instance, no install:

sh
claude mcp add --transport http cyanheads-mcp-server https://cyanheads.caseyjhand.com/mcp

Or run it locally:

sh
claude mcp add cyanheads-mcp-server -- npx -y @cyanheads/cyanheads-mcp-server

For other clients, add this to the MCP config file:

json
{  "mcpServers": {    "cyanheads-mcp-server": {      "command": "npx",      "args": ["-y", "@cyanheads/cyanheads-mcp-server"]    }  }}

The Claude Desktop bundle (the install badge above) runs the embedding model on ONNX WebAssembly, so it needs no platform-specific native libraries; npm and Docker installs use native CPU inference. Either way, the first start downloads the embedding model and later starts reuse the model cache. For Docker or a source build, see Running the server.

Configuration

All configuration is validated at startup via Zod schemas in src/config/server-config.ts. Every variable has a sensible default — out of the box, the server points at the canonical cyanheads fleet.

VariableDescriptionDefault
MCP_TRANSPORT_TYPETransport: stdio or httpstdio
MCP_HTTP_PORTHTTP server port3010
MCP_HTTP_HOSTHTTP server bind host127.0.0.1
MCP_HTTP_ENDPOINT_PATHHTTP endpoint path where the MCP server is mounted/mcp
MCP_AUTH_MODEAuthentication: none, jwt, or oauthnone
MCP_SESSION_MODEHTTP session posture: auto, stateful, or stateless. src/index.ts declares stateless; set this only to override it.stateless
MCP_LOG_LEVELLog level (debug, info, warning, error, etc.)info
CATALOG_URLRemote fleet.json endpoint (schema v2 with baked embeddings). Must be an absolute URL. Override to front your own fleet.https://caseyjhand.com/fleet.json
CATALOG_FETCH_TIMEOUT_MSPer-request timeout for fleet.json fetches: integer milliseconds, 1–2147483647.10000
CATALOG_REFRESH_SECONDSBackground poll interval for fleet.json refresh. 0 disables; positive values up to 2147483.647 seconds use the runtime's millisecond timer resolution.3600
EMBEDDING_MODEL_IDHugging Face model id for query embedding. Must match fleet.json.embeddingModel.Snowflake/snowflake-arctic-embed-m-v1.5
SIMILARITY_FLOORCosine similarity cutoff for cyanheads_search_catalog results. Must be within [0, 1].0.3
OTEL_ENABLEDEnable OpenTelemetryfalse
OTEL_EXPORTER_OTLP_ENDPOINTOTLP base URL for traces and metricsUnset
OTEL_EXPORTER_OTLP_LOGS_ENDPOINTExplicit OTLP logs URL; requires the OTel log peers included in the default Docker buildUnset
LOG_TOOL_FAILURE_PAYLOADSLog failed arguments and results, redacted by key name. Secrets inside free-form values are not redacted.false
LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTESUTF-8 byte cap for each logged failure payload16384

See .env.example for the full list of optional overrides.

Running the server

Local development

Requires Bun v1.4.0 or higher (or Node.js v24+).

  • Clone and install:

    sh
    git clone https://github.com/cyanheads/cyanheads-mcp-server.gitcd cyanheads-mcp-server && bun installcp .env.example .env   # every variable has a default; override as needed
  • Build and run the production version:

    sh
    # One-time buildbun run rebuild
    # Run the built serverbun run start:http# orbun run start:stdio
  • Run checks and tests:

    sh
    bun run devcheck  # Lints, formats, type-checks, runs MCP and packaging lintersbun run test      # Runs the test suite

Docker

sh
docker run --rm -p 3010:3010 ghcr.io/cyanheads/cyanheads-mcp-server:latest

The image defaults to HTTP transport, stateless session mode, and logs to /var/log/cyanheads-mcp-server. To run it over stdio from an MCP client, use "command": "docker" with "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/cyanheads-mcp-server:latest"]. To build locally, docker build -t cyanheads-mcp-server .; OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.

Project structure

DirectoryPurpose
src/mcp-server/toolsTool definitions (*.tool.ts). Two tools — cyanheads_search_catalog and cyanheads_describe_entry.
src/services/catalogCatalog service — remote fleet.json provider with atomic-swap refresh, vector index, snippet builders, the self-description fallback record, and the query-time embedding runtime (@huggingface/transformers, behind an injectable interface for deterministic tests).
src/configServer-specific environment variable parsing and validation with Zod.
tests/Unit and integration tests, mirroring the src/ structure.
docs/Design doc and schema reference.

Development guide

See CLAUDE.md for development guidelines and architectural rules. The short version:

  • Handlers throw, framework catches — no try/catch in tool logic
  • Use ctx.log for logging, ctx.state for storage
  • Register new tools in the tools array passed to createApp() in src/index.ts
  • Wrap external data: validate raw → normalize to domain type → return output schema; never fabricate missing fields

Contributing

Issues are welcome. Run checks and tests before submitting:

sh
bun run devcheckbun run test

License

Apache-2.0 — see LICENSE for details.

來源:README.md,提交 dd138e4

工具

2

cyanheads_search_catalog

Search Fleet Tools and Servers

Search fleet tools and servers by natural-language description. Returns ranked matches with brief summaries and the server each tool belongs to. Use scope "servers" to find which server handles a workflow; use the default scope "tools" to find specific tools.

輸入參數limitquery必填scopeoffsetcategoryserversOffset

cyanheads_describe_entry

Describe Fleet Tool or Server

Return the description and install snippets for a named tool or server. For tools: the description, owning server, and connection metadata. For either kind: local (stdio, via npx) install snippets for every published server, plus remote (HTTP) connection snippets when a hosted endpoint exists — for every supported client, or one client via the client parameter.

輸入參數kindname必填clientserver

版本歷史

6
  1. v0.5.0最新Oct 29, 2026
  2. v0.4.5Oct 25, 2026
  3. v0.4.4Oct 19, 2026
  4. v0.4.3Sep 30, 2026
  5. v0.4.2Sep 20, 2026
  6. v0.4.1Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分