
mcptoon
io.github.activeing123由 GitHub 账号 activeing123 发布v0.8.35更新于 Nov 8, 2026
MCP tools + agent skills in one zero-dependency CLI: 71,929 -> 581 tokens (-99.2%, measured).
概览
本地 CLI 网关,把 MCP 工具与 agent 技能压缩成索引,让助手按需发现、查看并调用工具,而不必加载全部 schema。
- 可以做什么
- 以精简名称索引列出已安装的 MCP 工具,仅在需要时获取单个工具的 schema
- 调用任意已配置服务器上的工具,跨服务器搜索,并为任务挑选最合适的几个工具
- 从 npm、pip 或 HTTP 安装、添加、移除并同步 MCP 服务器,导入现有客户端配置
- 把 REST 与 GraphQL API 当作命令使用,支持 OAuth 登录与保存的连接
- 路由文档与技能,运行代码时只有标准输出进入上下文,并自检服务器健康状况
- 适用场景
- 适合已安装大量 MCP 服务器或技能、完整 schema 挤占上下文窗口的情况,也适合需要在 Claude Code、Cursor、Windsurf 等多个 agent 之间共享同一批工具。想从注册表查找并接入新 MCP 服务器、又不想手改 JSON 时同样有用。
- 运行要求
- 以 Python 包形式在本地运行(stdio 传输),用 pip 或 pipx 安装;在 PEP 668 系统上建议使用虚拟环境或 pipx。未声明任何 API 密钥。部分功能需要 Node(uvx 演示)或联网(注册表搜索与远程服务器);远程凭据通过按名称引用的环境变量读取。
安装
在 SourceWeft 中
- 打开 控制台中的 mcptoon,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
One Place for All Your Agents' MCP Tools and Skills.
Install 1,000 skills and 1,000 MCP tools locally — and never worry about context flooding.
Tools and skills configured in any single agent just work across Cursor, Claude Code, Codex, and 103+ desktop & terminal agents.
Pioneering on-demand schema retrieval out of the box — no more stuffing context windows, saving 99% context tokens.
Zero dependencies, pure local, offline-first.
If this saves you tokens, please star the repo — it helps other builders discover it.
[PyPI version] [GitHub Stars] [CI Build] [Tests] [Zero Dependencies] [License]
[MCP Spec] [AllMCPs] [MCPVault] [mcpservers.org]
🌐 Official Website · 🧮 30s Token Tax Calculator · 🇨🇳 中文文档 · 📖 Developer Docs
[mcptoon Benchmark: 71,929 to 581 tokens (-99.2%)]
Skeptical of a synthetic 255-tool sample? Here are 7 real public MCP servers (209 tools) measured on a real machine → — 640,606 → 905 tokens (−99.86%). Or run mcptoon bench on your own catalog.
https://github.com/user-attachments/assets/0272d3a8-c74f-428d-8559-fbf804ce0685
Also: OpenAPI / GraphQL passthrough · OAuth · MCP resources & prompts · saved connections · code sandbox — see All commands.
pip install mcptoon && mcptoon quickstart — 565KB, zero dependencies, zero config.
Stays current on its own: it tells you when a newer version is out, and mcptoon upgrade updates in one command.
🔍 Common Pain Points & Solutions at a Glance (Click to expand)
🚀 Quick Start (Choose Your Way)
Is it actually saving you anything? After a fresh install mcptoon can sit in
direct mode — installed but not wired into the agent — and save nothing. See
Which mode is cheapest?, or just run mcptoon mode.
⚡ Core Capabilities at a Glance
Every command, with flags, is in All commands.
Why mcptoon: Solving Context Window Bloat & Multi-Agent Config Fragmentation
mcptoon is a zero-dependency local tool gateway and skill manager for LLM agents. In vanilla MCP architecture, every agent (Claude Code, Cursor, Windsurf, Codex, etc.) must inject the full JSON Schema definitions of all installed tools into its context window, resending them on every single turn.
According to our real-machine benchmark data: mounting just 255 common MCP tools consumes 71,929 tokens in descriptions alone, eating over half of a standard 128K context window before the first user prompt is processed. This not only inflates token costs unnecessarily, but also dilutes the model's attention, causing severe tool confusion and parameter hallucinations. mcptoon compresses these 71,929 tokens down to 581 tokens (−99.2%) using a compact name index, fetching schemas on demand only when a tool is actually called.
How Token Optimization Works: On-Demand Tool Retrieval & Dynamic Schemas
mcptoon keeps those descriptions on disk, not in context, and hands the agent a compact view instead:
- A name index, not full schemas. Picking a tool only needs its name — 255 tools become 581 tokens (−99.2%). The full schema is fetched on demand with
mcptoon inspect, only when a tool is actually called. - Skills the same way. One resident pointer (39 tokens) plus one lookup (791 tokens) replaces loading every
SKILL.mdin full — 1,572,330 → 39 + 791 (−99.99%). - Results too.
--toonre-encodes a tool's result as standard TOON. Measured 5.7% smaller on a mixed result sample, ranging 1.8%-48.6% by result shape — a list of records barely shrinks, a single record halves. Not a flat 34%: seeassets/benchmark_results.json.
Nothing is lost: the full schema and the full skill text stay one command away. Only the context window is spared.
mcptoon is a 565KB, zero-dependency native CLI that manages every MCP tool and agent skill on your computer — and shares them across all your agents with no config written by you.
This isn't just us talking
Those numbers are ours — but "loading every tool schema into context is expensive" is not a claim only we make:
- Anthropic's engineering write-up — tool schemas flooding the context window is a real cost; one example drops from 150,000 tokens to 2,000
- Firecrawl's benchmark — the same task cost 1,365 tokens via CLI vs 44,026 via MCP (32×)
- Scalekit's benchmark — CLI 10–32× cheaper, 100% reliable vs MCP's 72%
- MCP-Zero (arXiv:2506.01056) — on-demand tool retrieval, near-constant cost regardless of tool count
mcptoon is the one you can use today: it covers any agent that can run a shell, and writes a single hookup line into the mainstream GUI clients it knows.
Two ways in
Measure your numbers: pip install mcptoon && mcptoon bench — it reports your own
catalog, not the fixed 255-tool sample below (that sample's method is in
docs/tiktoken-benchmarks.md).
Skills work the same way: 1,572,330 tokens of SKILL.md text → 39 resident + 791 per lookup (−99.99%). Call results shrink a further ~6% with --toon (shape-dependent).
Path 1 · I just use AI tools
You have a desktop AI — Claude, Codex, Cursor, Windsurf, Cline, VS Code Copilot, and 97 more (full list of 103 →). Today, adding a tool or a skill means hand-editing that agent's JSON. mcptoon removes that step:
-
Install once.
quickstartfinds your MCP servers, writes your config, and registers mcptoon in every agent it detects. (Skipquickstartand the first command you run still self-heals: it installs mcptoon's own skill into each agent and builds the skill index, once per machine.) -
Add tools and skills in one place — here, not in each agent.
-
Use them from any agent. Your agent runs
mcptoonlike any other command — no config, no restart. See Works with every AI agent.
Want a head start? Four built-in starter packs — essentials, web-research, code-review, docs — stand up a working toolset in one command:
Path 2 · I build with MCP / agents
mcptoon is a plain CLI with scriptable output, plus an MCP endpoint when you want one.
- Stable output — JSON by default,
--toonfor smaller results (shape-dependent, 5.7% on a mixed sample),--format mcpto export standard MCP JSON. mcptoon serve— stdio or HTTP, connection pooling, per-agent keys, for clients that insist on a proxy.- Zero dependencies — pure Python standard library, so it drops into any environment (CI, containers, air-gapped).
Full reference: DEVELOPERS.md and All commands.
Contents
- Why mcptoon
- How the token saving works
- This isn't just us talking
- Two ways in
- Path 1 · I just use AI tools
- Path 2 · I build with MCP / agents
- 30 seconds up and running
- What it does
- Where the tools come from
- The three bills
- Install
- Works with every AI agent — 103 clients (42 CLI · 61 serve)
- Why a CLI, not a proxy
- Which mode is cheapest?
- All commands
- Trust and safety
- Credits and references
- Contributing
- Troubleshooting & FAQ
- License
30 seconds up and running
quickstart is also what makes mcptoon visible: it writes mcptoon serve into each
agent's config as the reserved server mcptoon, so your agent can see mcptoon itself.
Already synced? Re-register with mcptoon sync --self (plain mcptoon sync only writes
your servers); check the state any time with mcptoon status.
Two ways in — and you don't pick one. mcptoon is a CLI first: a shell-capable agent
runs mcptoon commands, and that is the cheapest path — the schemas never enter context.
quickstart also registers mcptoon's own MCP entry (mcptoon serve) with each agent that
takes one, so a client that can only see MCP servers still reaches your tools. The MCP entry
ships in compact mode: it keeps your upstream tool list out of the model's context and
sends it to mcptoon_manifest → inspect → call instead. mcptoon status shows both ledgers.
And it is fully reversible. The install registers the gateway, and by default
quickstart also takes over — it routes your existing servers through the gateway
and removes their direct entries (without that step your agent sees the same tools
twice, once direct and once through the gateway, which costs more, not less). It
is a listed, confirmed step, and it is undoable: mcptoon restore drops the
gateway entry and puts your servers back exactly where they were. Anything you
added to a config afterwards is left untouched. mcptoon off is the lighter
switch — it removes only the gateway entry and leaves your servers where they are.
Preview either with --dry, and preview the complete removal plan with
mcptoon uninstall --dry (it prints exactly what it will remove first).
Don't want to install yet? Watch it work instead (needs Node):
It boots the official "everything" reference server, calls one tool, and prints the token math on your screen — no API key, none of your servers, nothing written to disk.
What it does
Tools: schema on demand
The full schema is compressed to a name index. When you need one, mcptoon inspect
fetches its real parameters, then call runs it. You pay for a listing, not for every
turn.
Skills: one resident pointer
No more loading the whole catalog. A single pointer line stays resident (39 tokens) and one lookup returns the most relevant skills (791 tokens). Views are links (a junction on Windows, no admin needed), so one edit at the source is live everywhere and there is no second copy to drift.
Install once, share everywhere
Install mcptoon once and every AI on the machine gets all your tools and skills. Add more later and it is live immediately — no agent restart, no per-agent JSON.
Add tools your way
One command per server, from npm / pip / HTTP. Or let mcptoon scan what you already have:
mcptoon discover.
A remote server that needs a token reads it from the environment, so no credential is ever written to disk:
${NAME} is resolved at request time, so the config, the generated handler and every log
keep the template — rotate the variable and the next call uses the new value, with no
reinstall. A missing or empty variable fails loudly, naming it, never as an empty header.
Where tools come from — search across 17,000+ MCP servers with one command
On a new machine the first question isn't "how do I save tokens", it's "which tools do I
even want". The old answer is to hunt GitHub for mcpServers snippets and hand-copy them
into JSON.
mcptoon ships no tools and bundles no catalog. It queries the upstream registries, so you search for exactly what you need:
Results carry a ✓ (registry-verified), a type tag (npm / pypi / hosted / remote)
and a call count. Data comes from two upstreams, queried live and never stored:
Why nothing is bundled: a built-in list would need a release to update and would pull
someone else's source into your supply chain. mcptoon stores only a pointer — the
search writes one line into your own ~/.mcptoon/config.json; third-party source never
lands inside mcptoon.
Then distribute to every agent:
How to read a result: the index mixes official @modelcontextprotocol/* servers with packages individuals publish. A ✓ means the registry verified the entry — your cue to read the source before you hand it credentials.
The skills half: skills search <query> queries the open skills index (skills.sh) — find a skill by what it does, then install it with skills add <git-url>. mcptoon installs the repos you point it at — the catalog is the open ecosystem itself.
Starter packs: if you'd rather not pick tool-by-tool, four built-in packs — essentials, web-research, code-review, docs — each bundle a few tools plus a ready-made prompt. mcptoon install --packs lists them; mcptoon install --pack essentials installs one. The two research packs need no API key.
The three bills, and why you must not mix them
mcptoon saves tokens in three separate places. Comparing the numbers across them is meaningless.
The figures below come from catalogs of three different sizes — a 255-tool synthetic sample (the fixed headline benchmark), a 1,109-tool machine, and whatever your own machine has. Do not compare a percentage from one against a token count from another; each table states which catalog it measures.
There are two ways to read "how much does this save?", and they answer different
questions. The gateway figure — full schemas versus what the agent actually loads
under the default compact exposure — is what installing mcptoon buys, and it is the
honest headline (it scales with catalog size: the more tools you have, the larger it
gets). The slim-schema figure (same tools, terser descriptions) is the smaller,
secondary claim (88.5%), and it is what manifest --slim buys. mcptoon status prints
both, side by side, from one measurement, so the two can never drift apart.
Bill 1 · Tool discovery (manifest): 99.2% smaller by default
mcptoon manifest with no flags is this tier. Want more? --slim (names plus param
types, 8,282 tokens, −88.5%) or --full (the complete schema).
Bill 2 · Call results (call): optional, --toon saves ~6%
This bill comes due after a tool returns. mcptoon call prints JSON by default and
saves nothing by default. Add --toon to shrink the result.
Bill 3 · Skill catalog (skills): 1,572,330 → 39 resident + 791 per lookup
One table, all three, on the machine this README was written on:
The fixed headline benchmark — a synthetic sample of 255 tools across 50 servers,
tiktoken cl100k_base. It is not your catalog; run mcptoon status to see your own
numbers:
Measure your own catalog with mcptoon bench (it reports your tools, not this fixed
sample). The exact three-format table above is reproducible too — no clone needed:
Method and caliber: docs/tiktoken-benchmarks.md.
Install
Linux (Debian/Ubuntu 23.04+, and any distro that follows PEP 668), and Homebrew Python on macOS. A plain
pip installinto the system Python is refused there witherror: externally-managed-environment. That is the distro protecting itself, not a problem with mcptoon. Install it the clean way instead:
pip install --break-system-packages mcptoonalso works, but it writes into the system Python — preferpipxor a venv. On Windows,pip install mcptoonjust works.
Other ways to install
Nix
Packaged by numtide/llm-agents.nix — a bot follows every PyPI release, so the flake is never a version behind by hand:
The plugin and the skill are both surfaced through
sudosubin/agents.nix as
pkgs.agent-plugins.github.activeing123.mcptoon.<plugin-name> and
pkgs.agent-skills.github.activeing123.mcptoon.<skill-name>.
Cross-Agent Support: Works with Cursor, Claude Code, Windsurf & 103+ Clients
mcptoon reaches an agent one of two ways, and every client below falls into one of them.
You don't pick — quickstart registers both, and each host takes whichever it can:
- CLI leg — the agent runs
mcptoonitself. Anything with a shell (a CLI agent, or a coding IDE with a terminal) needs zero config: it runsmcptoon call,mcptoon search,mcptoon skills resolve. Nothing is written into it at all. - serve leg — the client can't run a shell. A chat app or GUI mounts MCP instead, so it
gets one entry:
mcptoon serveas a single MCP server. One line, one place.
The market, covered. 103 clients, taken from awesome-mcp-clients plus vendor docs for the coding agents that postdate it; developer libraries (mcp-agent, mcp-client-go) are excluded because a user does not run them. Evidence is per client — we name what we verified, not what we assumed.
CLI leg — 42 clients, zero config (they run mcptoon themselves):
AdaL · Aider · Amazon Q Developer · auggie · Autohand Code CLI · Claude Code · Claude Code Open · ClaudeMind · Cline · Codex · ContextKit · Continue · Copilot CLI · Copilot-MCP · Crush · Cursor · Dexto · Dolphin-MCP · Enola · Gemini CLI · Goose · JDBCX · Junie · KiloCode · Kiro · McPico · MCPOmni Connect · mistral-vibe · Nerve · Octomind · opencode · OpenHands · PraisonAI · Qwen Code · Roo Code · Slack MCP Client · SwarmClaw · Trae · VS Code GitHub Copilot · Warp · Windsurf · Zed
serve leg — 61 clients, one mcptoon serve entry (no shell, so they mount MCP):
5ire · Agent Bridge · Agent-cli · AgentOne · AIaW · Ano · AnythingLLM · Argo-LocalAI · askit-mcp · AstrBot · BoltAI · BrowseWiz · Canvas MCP Client · CarrotAI · Chainlit · ChatMCP · Cherry Studio · Claude Desktop · console-chat-gpt · DeepChat · DocsGPT · eechat · Enconvo · Fastchat MCP · FLUJO · Glue · HyperChat · kibitz · Klavis AI · LangBot · LibreChat · LobeHub · Lutra · MCP Chatbot · MCP CLI client · MCP Playground · MCP Simple Slackbot · MCP SuperAssistant · MCPCLIHost · MCPHost · Memex · MindPal · NextChat · OpenClaw · oterm · Qordinate · Runbear · SeekChat · Simple AI · Superinterface · Tambo · Taskade · Tester MCP Client · Tiles Notebook · Tome · Vercade · WhatsMCP · Witsy · y-cli · Yume · Zin-MCP-Client
Evidence status — sync --self writes a hookup line into the 12 hosts we have verified
against their own docs; every other host above is reached by the CLI or by mcptoon serve
without a host-specific file, so there is nothing to verify per host.
What mcptoon writes, host by host
mcptoon is a CLI tool — a manager, not a resident proxy or service, and not a client
library. Your agent never talks to your upstream MCP servers directly: it either runs
mcptoon commands, or reaches them through mcptoon's own MCP entry (mcptoon serve).
For the hosts that take a file, this is exactly what lands where:
mcptoon serve is the other direction: run all your configured servers behind one MCP
endpoint, with connection pooling and per-agent keys, for clients that insist on a proxy.
You don't have to choose between the two — the CLI stays the primary way in, and the bridge
is wired alongside it wherever the host can take one.
Why a CLI, not a proxy
MCP's premise is that every capability is a server your agent must be configured to reach — which is why one new tool means editing per-agent JSON in a different format for each, restarting everything, and re-paying the full schema cost in every agent.
A command line is the one interface every agent already has. And the form factor is measurably cheaper on its own, before mcptoon does anything:
- Firecrawl: the same task cost 1,365 tokens via CLI vs 44,026 via MCP — 32×
- Scalekit: CLI 10–32× cheaper, 100% reliable vs MCP's 72%
The proxy form exists too — mcptoon serve puts all configured servers behind one MCP
endpoint — and quickstart wires it alongside the CLI, so you never have to choose. This
section is about the shape mcptoon is built around, not a switch you have to flip.
Which mode is cheapest?
There are three ways mcptoon can hand tools to an agent, and they cost very
differently. Only one is the cheapest, and it is not the state a fresh install
starts in. (The token figures below are from the 255-tool sample; your own catalog
differs — mcptoon mode prints your numbers.)
CLI is cheapest because it is idle at zero. It costs nothing on a turn that
uses no tool, and a few hundred tokens only on the turn it does. serve is a close
second — a small fixed bill every turn. direct is what you pay when mcptoon is
installed but not wired into the agent, and it is where a fresh install sits, which
is why mcptoon can feel invisible until you run mcptoon quickstart.
The "99%" in this README is the definition-side saving — from not loading every schema. CLI and serve both get it; direct does not. Result compression is a separate, much smaller bill (Bill 2 above) and is never the reason to install.
Find out which mode you are in — and what each costs on your catalog — with
mcptoon mode; print a one-line badge with mcptoon statusline.
All commands
Full reference in DEVELOPERS.md.
Format family: four tiers, compact by default
All optional; the default is already the leanest tier.
Why compact by default? Choosing which tool to use only needs names (581 tokens for 255 tools); parameter detail matters at call time and is fetched on demand. Defaulting to full schemas would hand the 99.2% right back.
The rule for agents: use manifest to choose, inspect before you call. Measured on
41 live tools: an agent guessing arguments from names alone lands ~10% valid calls, while
one that runs inspect once for the 2–3 tools a turn actually uses hits 100% — identical
to injecting every schema, at a fraction of the cost.
Trust and safety
It's just a 565KB native CLI — delete it anytime; keep it, and you never have to configure tools or skills for any agent again. mcptoon touches your agent configs, so it is built to be transparent — and easy to walk away from.
Three guards run on every tool result before your agent sees it:
- Reversible.
mcptoon restoreundoes a takeover (drops the gateway and returns your servers);mcptoon offremoves only the gateway entry;mcptoon uninstall --dryprints the full removal plan first. Your servers are never deleted unless you ask. - No telemetry. No analytics, no crash reports, nothing phoned home.
- Local-first. Your tools, skills and files stay on your machine. The only thing that leaves is
install --search, which asks the registries for a catalog listing — it never sends your data. - No stored credentials. API keys pass straight from your config or environment.
- No dependencies. Pure Python standard library — nothing in the supply chain to audit.
CI enforces it with
scripts/check_zero_deps.py. - No daemon. Pure CLI — no resident process, no listening port.
- Formats don't break compatibility. The wire protocol is always standard JSON-RPC;
compact/slim/toon only affect mcptoon's output to the agent. If
--toondecoding ever fails it falls back to JSON, and one--fullrestores the native schema. No lock-in.
Scope, in one line: mcptoon is an index and a config manager — it points you to each tool's own source, which you can review on its own terms.
Credits and references
- TOON standard — v4.1 (MIT), vendored from python-toon and credited in NOTICE
- ToonDeck — a GUI console for mcptoon (pre-alpha): same engine, point and click instead of typing commands
Who builds this: mcptoon is an independent third-party project maintained by @activeing123. It is not affiliated with Anthropic.
Contributing
Three hard rules: zero dependencies (CI-enforced), new behavior ships with tests, Windows is a first-class target. New here? Start with CONTRIBUTING.md and DEVELOPERS.md.
The codebase: 41,185 lines of Python across 56 modules, zero third-party dependencies.
Support
Hitting an error? Troubleshooting & FAQ covers the common ones
(Server 'X' not configured, the skills sync mis-delete gate, unknown
command/option exit codes, why a saving reads 99% not 100%, and a stale skills
count).
mcptoon is a one-person side project and stays free for individuals. If it cut your context bill:
- Sponsor it on GitHub — one-off or monthly.
- Star the repo — that's how other builders find small tools.
Team features are not built yet. One shared server list synced to every teammate's machine; a log of what got hydrated when. No pricing and no waitlist page — mail [email protected] and it moves up the list.
License
Apache 2.0. See LICENSE and NOTICE.
mcptoon is an independent third-party MCP client, not affiliated with Anthropic.
If mcptoon cut your context bill, star it — that's how other builders find small tools.
来源:README.md,提交 8751b28
工具
0版本历史
35- v0.8.34Oct 30, 2026
- v0.8.33Oct 29, 2026
- v0.8.30Oct 25, 2026
- v0.8.29Oct 25, 2026
- v0.8.28Oct 25, 2026
- v0.8.27Oct 23, 2026
- v0.8.26Oct 22, 2026
- v0.8.25Oct 21, 2026
- v0.8.24Oct 19, 2026
- v0.8.23Oct 19, 2026
- v0.8.22Oct 17, 2026
- v0.8.21Oct 17, 2026
- v0.8.20Oct 13, 2026
- v0.8.19Oct 12, 2026
- v0.8.18Oct 11, 2026
- v0.8.17Oct 11, 2026
- v0.8.16Oct 7, 2026
- v0.8.15Oct 6, 2026
- v0.8.14Oct 5, 2026
- v0.8.13Oct 5, 2026
- v0.8.12Oct 3, 2026
- v0.8.11Oct 2, 2026
- v0.8.8Oct 2, 2026
- v0.8.7Oct 2, 2026
- v0.8.5Sep 30, 2026
- v0.8.4Sep 29, 2026
- v0.8.3Sep 28, 2026
- v0.8.2Sep 27, 2026
- v0.8.1Sep 25, 2026
- v0.7.23Sep 24, 2026
- v0.7.20Sep 20, 2026
- v0.7.19Sep 18, 2026
- v0.7.18Sep 18, 2026
- v0.7.16Sep 17, 2026
- v0.7.14Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分