
Cowork
io.github.slashman413由 GitHub 账号 slashman413 发布v1.0.1更新于 Oct 27, 2026
Self-hosted MCP task inbox shared by Claude Code, Codex, Gemini CLI and local LLMs.
概览
自托管的 MCP 任务收件箱与仪表盘,让多个 AI 编程代理共用一个任务队列,并支持模型路由与故障转移。
- 可以做什么
- 注册与管理代理:注册客户端及其可运行的模型、注销代理、发送心跳,并检索约 285 个代理、19 个分部的名册
- 处理任务收件箱:为其他代理或平台创建任务、认领待处理任务、提交结果完成任务,并按状态或平台筛选列出任务
- 查看运行概况:获取包含活跃代理与收件箱统计的完整仪表盘数据
- 调度与编排:把任务分派给具名模型,支持回退链、按分部覆盖与单任务指定,并提供声明式工作流与产物管理
- 适用场景
- 适合在一台或多台机器上运行多个编程代理或命令行工具,希望用一个共享队列让代理之间互相交接任务,并在模型触发限流时自动切换。也适合想要自托管仪表盘来观察代理活动的团队。
- 运行要求
- 以本地进程或容器方式运行。源码安装需要 Node.js 20 及以上与 npm 10 及以上,仅作中枢的镜像需要 Docker。agency-agents 仓库以 git 子模块形式捆绑。API 与 MCP 端点需要 COWORK_API_KEY 作为 Bearer 密钥;未设置时首次启动会生成并只打印一次。Antigravity 配额计量可选地需要 Google OAuth 客户端参数。
安装
在 SourceWeft 中
- 打开 控制台中的 Cowork,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
🤝 Cowork — one task inbox for Claude Code, Codex, Gemini CLI & Hermes agents
A self-hosted MCP server + web dashboard that lets different AI coding agents share one task queue. Dispatch a task from any of them (or from the UI); a dispatcher routes it to a named brain (model × CLI × machine), runs it, verifies the result, and falls back to the next brain on rate limits. Workflows, artifacts, remote machines and cost/usage meters are built in.
- Mixed-vendor agents, one inbox: Claude Code, Codex, Gemini CLI / Antigravity, Hermes, Ollama.
- Brain routing with fallback chains: route by role, pin by task, fail over on quota errors.
- Plain files on disk: the task store is files. No database to run.
- Remote brains: another machine joins with one command and offers its models
(JOIN-AS-A-BRAIN.md):
COWORK_URL=http://<host>:6868 HOST=<you> node cowork/deploy/remote-brain-client.mjs
Jump to: Quick Start · Connecting agents · Dispatcher · Brains · Workflows · MCP tools
Screenshots
One dark-themed single pane of glass for the whole operation: live host metrics (CPU / GPU / memory / temp), open-task and Agencies counters, the dispatcher's current role → model chains, and a real-time activity feed.
[Cowork dashboard — metrics, counters, dispatcher chains, and live activity]
The Workflows, Task Inbox, Brains, Connections, and Chat views are shown in context throughout this README.
Supported Platforms
Quick Start
Prerequisites
-
Node.js ≥ 20 (tested with v22)
-
npm ≥ 10
-
The agency-agents repo — bundled as a git submodule at
cowork/agency-agents(the Agencies — 285 agents). Clone with submodules:
Fast path — two scripts (recommended)
From the repo root, after cloning with submodules (above):
install-server.sh generates a systemd unit with this machine's real node path and
working dir (nothing to hand-edit), or pass --foreground to launch in the terminal and
--build-only to stop after building. install-skill.sh copies the right per-client
skill into place and, for Claude Code, merges mcpServers.cowork into ~/.claude.json
non-destructively (add --url http://<host>:6868 for a remote server; --client claude|hermes|agy|all
to target one). The numbered steps below are the same thing, broken out for when you want
to do it by hand.
Container (hub only)
The image (amd64 + arm64) runs the MCP server, dashboard and task inbox with the local
dispatcher off: agents connect to http://<host>:6868/mcp, and machines offer their brains
with deploy/remote-brain-client.mjs (see JOIN-AS-A-BRAIN.md). Config
and all state live in the /data volume. /api and /mcp always require a key: pass your own
with -e COWORK_API_KEY=…, or the server generates one on first start, saves it to
/data/api-key and prints it once. Clients send Authorization: Bearer <key> (the brain client
reads COWORK_API_KEY); open http://<host>:6868/?apiKey=<key> once to log the dashboard in. Images are
built from v* tags by .github/workflows/release.yml on a digest-pinned base.
1. Install Dependencies
2. Configure Settings
Config lives outside the repo. The tracked cowork/config.json is a sanitized
template only. On first run the server copies it to ~/.cowork/config.json —
your real per-server config (host binding, registered brains, chains). Edit that
copy, not the template; the server also persists all live dashboard/API edits there,
so your personal host/brain settings never touch the repo. Override the location with
the COWORK_CONFIG env var.
Edit ~/.cowork/config.json to match your environment:
All paths are relative to
cowork/(the parent ofserver/). Use~for home directory paths (e.g.,~/.claude/agents).
Key Settings
3. Start the Server
You should see:
4. Open the Dashboard
Open http://localhost:6868 in your browser.
Connecting AI Agents
The fastest way to talk to any connected model is the dashboard's Chat view: pick a brain, optionally scope it to a division and a specific agent, and your message is dispatched as a task — the reply is the task result.
🎙 Voice assistant (Chat → Voice)
Talk a new idea through, hands-free if you like. Each turn runs on the best brain that is
enabled and not cooling down on a rate limit (claude › codex › agy › hermes/dsh ›
ollama; pin an order with orchestration.voice.brains). If that brain gets rate-limited, the
turn moves to the next one.
- Grill: it uses the grill-me skill (
/grilling): one question at a time, each with a recommended answer, until nothing is ambiguous. Open questions are listed as it goes. - Plan: it proposes a plan: a yes/no success criterion and a few ordered phases.
- Execute (only with your permission): tap Approve & execute, or say "go ahead" while the plan is on screen. The plan becomes an active Goal that the Achiever/Judger loop drives through tasks until the success criterion is met. Phase progress is read aloud as it happens.
Speech-to-text and text-to-speech run in the browser (Web Speech API: Chrome, Edge or
Safari). The mic needs HTTPS or localhost. You can always type instead. Turns are tasks
tagged voice with context.conversational, so a question back to you counts as a
finished reply and is never parked on wait-input. REST: /api/voice/brains and
/api/voice/sessions[/:id[/turn|/execute]]. Sessions are stored in voice-sessions/.
For programmatic access, wire the MCP connection into your agent clients:
Scripted (recommended): deploy/install-skill.sh installs the cowork coordination
skill and wires the MCP connection for every agent client detected on the box — one command
instead of hand-editing each config:
It drops the per-client skill (canonical copies in deploy/skills/) into the client's live
skill dir and, for Claude Code, merges the mcpServers.cowork entry into ~/.claude.json
without disturbing your other servers. The manual per-client config is below for reference.
Claude Code
Add to your MCP configuration (~/.claude.json or project-level):
Then in Claude Code, the agent can call:
Antigravity (AGY)
Add to your AGY MCP settings:
agy quota meter / token refresh. To mint Antigravity access tokens, the usage
probe and deploy/remote-brain-client.mjs need Google OAuth client values. These are
the public values that ship with the agy and Gemini CLIs. They are not committed. Copy
.env.example to ~/.cowork/oauth-clients.env, fill it in, and run
chmod 600. Alternatively, export the same variables in the service environment;
process env takes precedence. If no values are set, the agy meter only works while a
cached CLI access token is still valid.
Hermes Agent
Configure the MCP endpoint in Hermes:
Any MCP-Compatible Client
The server speaks standard MCP over Streamable HTTP. Any client that supports
MCP can connect to http://localhost:6868/mcp.
Task Execution — the Dispatcher
The server includes a dispatcher that turns queued tasks into real agent runs.
Output becomes the task result; the full transcript is saved as result.md in the
task's artifacts dir.
Every task lands in the Task Inbox, tagged with the division/agent that ran it and the brain it ran on, with its output artifacts attached and filterable by status (done · in-progress · pending · wait-input · failed).
[Task Inbox — tasks tagged with division/agent, brain, and downloadable artifacts]
Two-stage routing
An unassigned task is routed in two stages by an orchestrator/classifier brain
(default qwen3.8-27b via Hermes, orchestration.classifier):
- Division — pick 1 of 19 divisions (testing, engineering, security, …).
- Agent — pick 1 of ~285 agents in that division. The chosen agent's
full
.mdpersona becomes the system prompt.
The agent then runs on a brain fallback chain (below). Skip the classifier by
targeting directly: context.agent: "<agent-slug>" or a special-executor name.
Tag a task manual to never auto-execute.
Executors: special agents + the Agencies
- Special executors (
config.json → orchestration.agents) — onlyorchestrator,generalist,video; each is{description, brains: [...]}with its own chain.videoruns the ComfyUI LTX pipeline (deploy/video-pipeline.sh; LTX only — never Wan/Hunyuan/SVD). - Agencies agents — the ~285 personas in the
agency-agentssubmodule, grouped into 19 divisions. They have no chain of their own; they run on the division's chain if one is set, else the global default.
Brain fallback chains (GET /api/chains)
- Global default —
orchestration.defaultChain; drag-reorder in the Brains view (PUT /api/chains/default). - Per-division override —
orchestration.divisionChains[<division>]; set/clear in the Agents view (PUT /api/chains/division/:division; empty = use default).
A chain runs top → bottom: the task runs on chain[0]; on failure the dispatcher
hands over to chain[1], then [2]… recording the failed brain on the task
each attempt, until success or the chain is exhausted. Pin a single task to one
brain with context.brain: "<id>".
The Agents view exposes the per-division chain for every division — drag to reorder,
+ add brain…, or reset to the global default. No template edits, no restart.
[Agents view — per-division brain fallback chains, editable inline]
Brains — named execution identities (model × platform × location)
config.json → orchestration.brains (GET /api/brains) names each brain a chain
can reference. The Brains view lists every registered brain — its platform
(claude / agy / hermes), underlying model, location, and whether it was
auto-registered by a connecting client — with one-click deregister:
[Brains view — every registered execution identity, model, and location]
Brain ids carry the model version (local-cc-opus-5-5, not local-cc-opus) so the
model a brain runs is readable from its id; only -default brains, which follow the
account default, are unversioned. The local-/remote- prefix must match the
brain's location, which means who runs it (local = the dispatcher spawns it;
remote = a client claims it from the inbox), not which machine it is on. DeepSeek
brains are retired — any id matching /deepseek/i is scrubbed from the registry on
load (see DENYLISTED_BRAIN_RE), so never put deepseek in a new id.
Renamed ids keep working. BRAIN_ID_ALIASES in server/src/config.ts (plus an
optional orchestration.brainAliases in config) maps retired ids to their canonical
id. Old ids in an on-disk config, a task's context.brain pin, or a client's
registration all resolve to the canonical brain. A client that still declares an
old id keeps receiving its tasks under that id (clientId on the brain), until it
re-declares the canonical one. Renamed on 2026-10-07:
Local brains the dispatcher spawns here. Remote brains it leaves pending
and publishes the brain id onto the task's context.brain so that machine's
client can discover and claim it (the client filters list_inbox for tasks whose
context.brain is one of its own ids). If no client claims a remote rung within
orchestration.remoteGraceMs (default 60 s), the dispatcher advances to the next
brain in the chain, so a clientless remote rung never stalls a task.
Artifacts work for both: local brains save files to $COWORK_ARTIFACTS_DIR
(the dispatcher collects them from disk); remote brains save to the same env dir
and the client uploads each file via POST /api/artifacts/:taskId/:file.
Either way they land in artifacts/<task-id>/ and become downloadable from the
Inbox. Outputs (the task's final deliverables) go in the outputs/ subfolder
($COWORK_OUTPUTS_DIR; remote clients upload via POST /api/outputs/:taskId/:file)
and get their own OUTPUTS section on the card, after RESULT and before ARTIFACTS.
Input files flow the other way — a person attaches files for the brain to
read. Attach them in the Chat composer (📎) or on any Inbox card ("+ Attach
files"); they are stored under inputs/<task-id>/ and mirrored onto
context.inputFiles. The dispatcher points a local brain at their absolute
paths in the prompt; a remote brain client downloads them (GET /api/inputs/:taskId)
before running and lists their local paths in the prompt. Inputs survive a re-run.
Failed tasks & re-run. When a task exhausts its whole fallback chain (every
brain failed verification) it finishes flagged failed: true. The Inbox groups
these under a red "failed" filter (kept out of the green "done" count) and
offers a confirm-gated ↻ Re-run that resets the task to pending from the top
of its chain (POST /api/inbox/:id/rerun) — preserving its brief and attached inputs.
Auto-registered brains (clients-capability protocol)
A connecting MCP client DECLARES the brains it can run via the register_agent
tool's brains field; the server auto-adds them to the registry (marked dynamic,
owned by that client). One machine can offer several models at once. Auto-registered
brains persist and are removed only by deregister_agent or the Brains view
(never on heartbeat timeout); removal cascades out of the default chain, every
division chain, and every special agent. Manage all of this from the dashboard's
Agents and Brains views.
Wiring a remote brain machine
deploy/remote-brain-client.mjs is a zero-dependency (Node 18+) Cowork MCP
client that does exactly that loop. Its header comment documents every env var.
Quickest — run it directly (foreground; good for a first test). One brain:
Several brains from one machine (declares them all; each becomes a targetable brain):
As a boot service (recommended for permanent machines):
It connects to COWORK_URL/mcp, register_agents (declaring its BRAINS, which
auto-register into the registry), then polls and claims only tasks whose
context.brain is one of its brain ids, runs the matching EXEC/MODEL, and
complete_tasks with its result and uploaded artifacts — appearing in Connections like any other
client. Flexible: the same script serves any brain by changing env only.
Scalable: add machines/brains by adding <name>.env files; claims are atomic
(single-process compare-and-set) so even multiple clients on the same brain id
never double-run a task — first claim wins.
Every connected client shows up live in the Connections view — grouped by platform, listing the brains it offers, its idle/busy state, and a per-session tally of how many tasks each brain has run vs. submitted:
[Connections view — live MCP clients, the brains they offer, and per-brain invocation counters]
The always-on coordinator agent shown in Connections as cowork/orchestrator
polls the inbox, two-stage-routes unassigned tasks, reclaims orphans, and
dispatches; transient per-task workers appear as e.g.
testing / Workflow Optimizer · local-hermes-qwen3.8-27b or video · local-comfy-ltx
while running.
CEO flow: tell Hermes (e.g. via Discord) an idea → Hermes creates ONE task with
context.agent: "orchestrator" → the orchestrator decomposes it into subtasks via
POST /api/inbox → each subtask is two-stage-routed to an agent on its brain
chain → results and artifacts appear live on the dashboard.
LLM classifier — no task left behind
An unassigned task (e.g. a free-text idea filed straight from Discord) no longer
stalls: the dispatcher runs the two-stage LLM router (default qwen3.8-27b
via Hermes, orchestration.classifier in config.json) that reads the task, picks
a division, then an agent, which then dispatches normally on that agent's
brain chain. Tag a task manual to skip both routing and dispatch.
Stale-claim reclaim
orchestration.staleClaimMs (default 30 min) reclaims any in-progress task
whose claiming agent has disappeared — a crashed/exited live agent or a
dispatcher killed mid-run — back to pending so the work is retried. A task
still owned by a heartbeating agent is never touched.
Dispatcher status: GET /api/dispatcher. Tune orchestration.maxConcurrent /
taskTimeoutMs / pollIntervalMs / classifier / staleClaimMs in config.
Deployment (systemd) & Remote Access
Easiest — deploy/install-server.sh generates and enables the user service with this
machine's resolved node path and working dir:
Manual equivalent (the tracked deploy/cowork-mcp.service has /home/USER placeholders
you must edit first — the script fills them in for you):
With server.host: "0.0.0.0" the dashboard is reachable from other machines at
http://<host-ip>:6868/ (LAN or Tailscale IP — 0.0.0.0 itself is a bind
address, not a URL). A non-loopback host always requires a key: set server.apiKey
(or COWORK_API_KEY), or use the one generated into api-key beside the config on first
start. Log the dashboard in once with http://<host-ip>:6868/?apiKey=<key> (it sets a
same-site cookie). server.allowUnauthenticated: true opts out; anyone who can reach the port
can then create tasks for your brains.
Moving a running open hub to a key without locking anyone out: set the key and keep
allowUnauthenticated: true. That is soft (migration) mode: a valid key is accepted, a wrong key
gets 401, and keyless requests still pass but are listed at GET /api/auth/keyless (key required).
Give the key to every client (brain clients: COWORK_API_KEY; MCP configs: an
Authorization: Bearer <key> header, e.g. deploy/install-skill.sh --key <key>; dashboards:
/?apiKey=<key> once). Dispatched tasks get COWORK_API_KEY in their env automatically. When
/api/auth/keyless stays empty, drop allowUnauthenticated and restart to enforce.
Switching from HTTP to HTTPS
By default the server listens over plain http://. That is fine over localhost,
but a browser only exposes the microphone (the New-task Dictate speech-to-text
button) in a secure context — https:// or http://localhost. Reach the
dashboard over http://<lan-or-tailscale-ip>:6868 and navigator.mediaDevices is
undefined, so Dictate can't start. Serving over HTTPS fixes it.
When server.tls points at valid cert/key files, Cowork runs a multiplexed dual-protocol listener
on port 6868 that accepts both HTTP and HTTPS simultaneously:
- Localhost in Chrome (
http://localhost:6868/): Chrome and modern browsers natively treathttp://localhostas a W3C-standard Secure Context (window.isSecureContext === true). The New-task Dictate mic button and clipboard work out of the box with zero certificate warnings. - Remote / Mobile on Tailscale (
https://<machine>.tailXXXX.ts.net:6868/): Remote connections use the valid Let's Encrypt TLS certificate provisioned via Tailscale. Chrome shows a verified, trusted green lock. - Automatic IP/Domain HTTP-to-HTTPS Redirection: Requests arriving over plain HTTP for external hostnames or IPs are automatically redirected (302) to the trusted HTTPS domain.
- SNI Fallback: Multi-domain TLS SNI callback routes domain traffic to the trusted certificate and loopback TLS traffic to the local fallback certificate.
Migrate in this order:
-
Obtain or Generate a TLS Certificate:
- Tailscale Let's Encrypt (Recommended, Zero Warnings):
This fetches a genuine Let's Encrypt certificate via
tailscale certand installs it to~/.cowork/tls/cert.pemand~/.cowork/tls/key.pem. - Self-Signed (Alternative):
- Tailscale Let's Encrypt (Recommended, Zero Warnings):
This fetches a genuine Let's Encrypt certificate via
-
Point the config at the files. Add a
tlsblock underserverin~/.cowork/config.json(the live config — the repoconfig.jsonis only the default template and ships"tls": null):~and repo-relative paths are resolved for you. This is the step most often missed: generating the cert alone does nothing — without this block the server stays onhttp://. -
Restart the server so the new scheme takes effect. A plain
systemctl --user restart cowork-mcprun from inside a task SIGKILLs that task (it is a child of the unit it's restarting), so use the idle-safe redeploy, which waits until no task is in flight:Confirm it came up:
-
Accessing the Dashboard in Chrome:
- On the host machine: Open
http://localhost:6868/(Secure Context active, 0 SSL warnings). - From remote devices or mobile: Open
https://<tailscale-domain>:6868/(Trusted Let's Encrypt SSL lock).
- On the host machine: Open
-
Updating Agent Clients and Skills: Run
deploy/install-skill.sh, which automatically detects your Tailscale domain or localhost configuration:
Server-side self-dispatch is loopback-optimized — local subtask dispatch runs over
http://localhost:6868through the multiplexed listener, avoiding TLS handshake overhead and certificate hostname mismatch errors entirely.
To roll back, set server.tls to null (or remove the block) and redeploy — the
server returns to http://.
MCP Tools Reference
Once connected, agents have access to these tools:
Example: Cross-Platform Task Dispatch
Workflows — declarative pipelines, two execution modes
A workflow is a version-controlled template (workflows/<id>.json). It runs
in one of two modes, chosen per template with "mode":
The Workflows view renders each template as a live graph — sequential fan-through pipelines and parallel fan-out/fan-in diamonds alike — with every step pinned to a division or agent, plus Dry run (inspect the resolved plan) and Run controls:
dag(default) — static & deterministic. The steps form a DAG wired bydependsOn; the whole graph is expanded into inbox tasks up front and the dispatcher walks it in dependency order. No new execution engine: expansion just pre-wires the tasks the dispatcher runs anyway. A multi-step job becomes reusable and inspectable instead of an LLM re-planning from scratch every time.orchestrated— adaptive & orchestrator-driven. The steps are a library of candidate moves; nothing is planned up front. After each step finishes, the orchestrator brain decides the next step automatically from thegoal+ the results so far — or answersDONE. The path taken adapts to what comes back. Every decision (the step it chose + its rationale) is logged toworkflow-runs/<runId>.jsonand rendered as a decision log in the dashboard.
DAG mode
A template is a list of steps; each step is a task with a stable key that other
steps reference in dependsOn (resolved to real task ids at run time):
Run it (or dry-run to inspect the resolved plan without creating anything):
Every task a run creates carries context.workflowId, context.workflowRunId,
and context.stepKey so the Workflows tab in the dashboard can group a run
and render its DAG with per-node live status. Templates are validated on load
(unique keys, deps exist, and the graph is acyclic — a cycle would deadlock
dependsOn forever); a template that fails validation is skipped rather than
crashing the list, and the reason is surfaced in the dashboard (and at
GET /api/workflows-invalid) so a malformed template is easy to fix. Steps can
pin an agent, division, or brain, or leave them off and let the router pick.
Orchestrated (adaptive) mode
Set "mode": "orchestrated", give the template a goal, and list the steps as a
candidate library (dependsOn becomes an optional hint used to wire a step's
inputs when its upstream has already run). Running it writes a run record and
creates no tasks — the dispatcher's orchestrator loop makes the first
decision on its next tick, then one more after each step completes:
The orchestrator brain (the router model — orchestration.classifier, else the
first local runnable brain in the orchestrator/default chain) is prompted with the
goal, the completed steps and their results, and the remaining candidates; it
replies with one step key or DONE. orchestration.maxWorkflowSteps (default 12)
force-finishes a run whose orchestrator never says DONE.
Both modes stamp every task with context.workflowId, context.workflowRunId,
and context.stepKey so the Workflows tab groups a run and renders it live —
a DAG for static runs, a decision timeline for adaptive ones. Templates are
validated on load (unique keys, deps exist, and — for DAG mode — the graph is
acyclic); a template that fails validation is skipped rather than crashing the
list, and the reason is surfaced in the dashboard (and at
GET /api/workflows-invalid).
The engine (validation, cycle detection, topological expansion, DAG wiring, run
reconstruction, and the orchestrated decision loop) is covered by a test suite —
cd server && npm test.
Shipped company workflows
The workflows/ directory ships a set of realistic, cross-functional company
pipelines. Each step pins a division or agent (never a brain), so
the brain fallback chain for every role stays editable from the dashboard's
Agents view (orchestration.agents[*].brains for special agents;
divisionChains[*] / defaultChain for agents) — change who runs a step
without touching the template.
REST API
The Web UI uses these endpoints (also available for scripts/integrations):
Directory Structure
Debugging
MCP Inspector
Test the MCP endpoint with the official inspector:
This opens a web UI at http://localhost:6274 where you can browse and test all MCP tools interactively.
curl Examples
Test MCP Tool Calls
Configuration Reference
Full config.json Example
Portal launcher cards live in their own file, portal.json (live copy
~/.cowork/portal.json, hot-reloaded) — see docs/dashboard.md#portal.
Environment-Specific Overrides
The real config is read from ~/.cowork/config.json by default. Point at a
different file with the COWORK_CONFIG env var (and override the port / API key
without editing any file):
The Agencies catalog is cached in memory and rescanned at most once per COWORK_ROSTER_TTL_MS
(default 30000). New agents / a submodule bump propagate within that window with no
restart; set 0 to rescan on every query, or a larger value to reduce disk work.
Cowork Pro
Cowork Pro ($59) is the production package: advanced workflows, priority support and lifetime updates. It is also part of the AI Developer Stack Bundle ($79).
License
MIT © 2026 slashman413. The core server, dashboard and remote-brain client are free and open source; Cowork Pro (above) is the separate paid add-on.
来源:README.md,提交 f6fc28d
工具
0版本历史
2- v1.0.1最新Oct 18, 2026
- v1.0.0Oct 17, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分
