目录

基于 stdio 的自建 MCP:我的 Skill 化工作流实践

这几个月在做一些高频的日常工作流程时,我有意沉淀成 skill,过程中踩了不少坑,其中最核心的一个问题,其实不是技术,而是——权限

这篇主要分享一下我是怎么做权限控制,搭建一套“自己可控”的 MCP + skill 体系的。

一、问题的本质:权限与边界

在实际落地 AI Agent 的过程中,我遇到的限制主要来自两方面:

1. Agent 接入受限

比如:

  • 公司不开放企微应用权限
  • 不支持自定义机器人回调
  • 没有现成的工具平台

这时候会面临一个选择:

  • 要么等公司支持
  • 要么自己搞一套(网页 / CLI / 本地工具)

我对于自己的高频工作流程这个场景,选择的是后者:直接 CLI 化,绕过平台依赖


2. 数据与操作权限受限

另一个问题是:

  • 没有统一的 MCP 能力(查库、查日志、查缓存等)
  • 有些数据不能暴露给 AI
  • 有些操作不能让 AI 直接执行(比如改表、发布、改配置)

本质上,这是一个经典矛盾:

希望 AI 帮我做事,但又不能让它“看到一切、操作一切”


二、核心思路:自建 MCP,隔离能力边界

我的解决方案是:

自己实现一层 MCP,把所有敏感逻辑封装在本地代码里

关键设计点:

1. 登录态自己解决

如果公司有 SSO:

  • 用自己的 token

如果没有:

  • 直接用 Cookie

但重点是:

这些敏感信息绝对不能出现在对话里


2. 敏感信息不暴露给 AI

我的做法是:

  • token / cookie → 放环境变量
  • 查询逻辑 → 写在 MCP 代码里
  • AI 只负责“描述需求”,不接触底层细节

例如:

AI 调用接口时只需要:

环境: prod
库: user_db
SQL: select * from xxx

但实际上:

  • 连接地址
  • 鉴权信息
  • 数据过滤逻辑

全部在 MCP 内部处理


3. 数据层就做权限控制

而不是在 AI 层“提醒不要查某些数据”。

例如:

  • 自动过滤敏感字段(手机号、身份证等)
  • 屏蔽某些表
  • 对 SQL 做校验 / 限制

核心原则:

让 AI “天然拿不到”敏感数据,而不是“不要让它用”


4. 本地运行(stdio 模式)

我的 MCP:

  • 不起服务
  • 不开端口
  • 直接通过 stdio 被调用

好处是:

  • 更安全(没有对外暴露)
  • 更轻量(不用维护服务)
  • 更适合个人使用

三、Skill 化:把流程变成“可执行 SOP”

在 MCP 之上,我做了第二层抽象:skill

为什么要做 skill?

因为很多工作其实是“流程”:

  • 查日志 → 定位错误 → 查数据库 → 给结论
  • 发布前检查 → 配置确认 → 灰度验证

这些都可以:

固化成一个标准流程(SOP) + 让 AI 自动执行


Skill 的设计方式

每一个 skill 本质是一个 Markdown:

  • 描述流程
  • 定义参数
  • 指定调用 MCP 的方式

既是:

  • 人类可读的文档

也是:

  • AI 可执行的指令

调用方式

我通过 CLI + plugin 的方式:

直接:

/my-skill-1

AI 就会:

  • 读取 skill
  • 按流程执行
  • 调 MCP 完成操作

四、整体结构

这是我当前的项目结构:

my-plugin/
├── .claude-plugin/
│   └── plugin.json
├── .mcp.json
├── server/
│   └── mcp_server.py
└── skills/
    ├── my-skill-1/
    │   └── SKILL.md
    └── my-skill-2/
        └── SKILL.md

可以理解为三层:

  1. MCP 层(server)
    • 封装所有底层能力(数据库、接口等)
  2. Skill 层(skills)
    • 把流程标准化
  3. Plugin 层
    • 提供统一入口(CLI 调用)

五、这套方案的优缺点

优点

  • 不依赖公司基础设施
  • 权限完全可控
  • 数据安全可控
  • 可持续沉淀(skill 越来越多)

虽然看似什么都要自己搭,但其实 mcp_server 代码、SKILL.md 的内容都由 AI 辅助生成,效率非常高。此外,我不追求什么东西都要通用化跟大家分享使用,这种仅供我自己使用的工具,维护起来特别方便,工作流程有变动时也可以随时自己修改 SKILL.md,很灵活。


六、我目前的一点感受

这套方案没什么高深的,大家都在用,就是在做一件事:

把“人做流程”变成“AI 执行流程”,但执行权仍在我手里

而不是:

把系统权限直接交给 AI

其实现在大家普遍已经形成了这样一种模式:

  • AI 负责“思考 + 编排”
  • MCP 负责“执行 + 兜底”

两者之间用 skill 做桥梁。

我思考了一下,这套分工让一件事情发生了变化:

我们真正解放了一部分“不得不使用的人类智能”

在过去,很多流程其实已经高度标准化:

  • 步骤是固定的
  • 输入输出是明确的

但依然离不开人,是因为中间总有一些“说不清楚的判断”:

  • 该查哪一类数据
  • 异常出现时怎么分支
  • 多个信息之间如何关联

这些并不是系统能力的问题,而是:

缺少一个可以做“弱推理 + 灵活决策”的执行者

所以最后只能由人来补这一块。

而现在,大语言模型刚好补上了这个空缺:

  • 能理解上下文
  • 能做模糊判断
  • 能在流程中动态决策

于是,原本必须由人参与的那一段,可以被 AI 接管了。