MCPSkill
Mcp和Skill市场MCP 与 Skill
MCP

MCP 客户端

负责发现能力、调用工具,并把可用的 Skill 目录展示给模型的一侧。

客户端职责

MCP 客户端在 AI 应用或 agent 运行时里负责能力发现、调用和结果使用。它决定有哪些服务器可用,能调用哪些工具或资源,以及结果如何进入后续推理流程。

如何支持 Skill

支持 Skill 的客户端需要一套本地或托管 Skill 文件夹的生命周期。这个模式既适用于项目级 Skill,也适用于用户级、组织级或内置 Skill。

1
发现

扫描配置目录,找出包含 SKILL.md 的子文件夹。

2
解析

提取 frontmatter 元数据,校验必填字段,保留正文供激活使用。

3
展示

只把名称和简介展示给模型,做成一个精简目录。

4
激活

只有任务匹配 Skill,或者用户明确选中时,才加载完整说明。

5
保留

已激活的 Skill 要去重,并防止在上下文压缩时丢失。

客户端小模拟

这个小脚本演示客户端侧的判断:先看用户请求,再决定要不要调用能力,最后把结果整理成回答。

import { searchDocs } from "./search-docs.js"

const capabilities = [
  {
    name: "search_docs",
    description: "搜索 MCP 和 Skill 文档页面。",
    call: searchDocs
  }
]

export function answerQuestion(question) {
  const shouldUseDocs = /mcp|skill|server|client|protocol/i.test(question)

  if (!shouldUseDocs) {
    return "这个问题不需要文档搜索能力。"
  }

  const tool = capabilities.find((item) => item.name === "search_docs")
  const result = tool.call({ query: question, limit: 3 })

  if (result.error) {
    return `工具失败:${result.error.message}`
  }

  if (result.results.length === 0) {
    return "我搜了文档,但没有找到匹配页面。"
  }

  return result.results
    .map((page) => `- ${page.title}: ${page.url}`)
    .join("\n")
}

客户端通常扫描哪里

本地客户端通常会扫描项目范围和用户范围。.agents/skills/ 这一约定有利于不同工具之间互通。

范围示例路径用途
项目<project>/.agents/skills/团队共享的仓库级 Skill。
项目原生<project>/.client/skills/客户端特定的项目 Skill。
用户~/.agents/skills/跨项目可用的个人 Skill。
用户原生~/.client/skills/客户端特定的个人 Skill。

信任与权限

项目级 Skill 来自仓库,可能并不可信。客户端在让 Skill 影响模型行为或读取资源前,应该考虑目录信任、诊断和权限白名单。

冲突规则同名情况下,项目 Skill 通常覆盖用户 Skill。
坏文件无效 Skill 要警告并跳过,不要静默加载。
资源访问把允许读取的 Skill 目录列进白名单。
云端 Agent云端沙箱看不到本地文件时,需要提前托管用户或组织 Skill。

新手检查项

  • 客户端展示给模型的应该是精简能力描述,而不是整份实现代码。
  • 客户端应该传结构化输入,而不是一大段模糊文字。
  • 客户端应该区分“结果为空”和“服务端报错”。
  • 客户端在跳页面时,应该保留语言选择和当前路由。