基于 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-1AI 就会:
- 读取 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可以理解为三层:
- MCP 层(server)
- 封装所有底层能力(数据库、接口等)
- Skill 层(skills)
- 把流程标准化
- Plugin 层
- 提供统一入口(CLI 调用)
五、这套方案的优缺点
优点
- 不依赖公司基础设施
- 权限完全可控
- 数据安全可控
- 可持续沉淀(skill 越来越多)
虽然看似什么都要自己搭,但其实 mcp_server 代码、SKILL.md 的内容都由 AI 辅助生成,效率非常高。此外,我不追求什么东西都要通用化跟大家分享使用,这种仅供我自己使用的工具,维护起来特别方便,工作流程有变动时也可以随时自己修改 SKILL.md,很灵活。
六、我目前的一点感受
这套方案没什么高深的,大家都在用,就是在做一件事:
把“人做流程”变成“AI 执行流程”,但执行权仍在我手里
而不是:
把系统权限直接交给 AI
其实现在大家普遍已经形成了这样一种模式:
- AI 负责“思考 + 编排”
- MCP 负责“执行 + 兜底”
两者之间用 skill 做桥梁。
我思考了一下,这套分工让一件事情发生了变化:
我们真正解放了一部分“不得不使用的人类智能”
在过去,很多流程其实已经高度标准化:
- 步骤是固定的
- 输入输出是明确的
但依然离不开人,是因为中间总有一些“说不清楚的判断”:
- 该查哪一类数据
- 异常出现时怎么分支
- 多个信息之间如何关联
这些并不是系统能力的问题,而是:
缺少一个可以做“弱推理 + 灵活决策”的执行者
所以最后只能由人来补这一块。
而现在,大语言模型刚好补上了这个空缺:
- 能理解上下文
- 能做模糊判断
- 能在流程中动态决策
于是,原本必须由人参与的那一段,可以被 AI 接管了。