<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>MCP on Zayn's Blog</title><link>https://blog.treesir.pub/tags/mcp/</link><description>Recent content in MCP on Zayn's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><managingEditor>yangzun@treesir.pub (Zayn)</managingEditor><webMaster>yangzun@treesir.pub (Zayn)</webMaster><copyright>2021-2026 Zayn</copyright><lastBuildDate>Sun, 29 Mar 2026 10:30:00 +0800</lastBuildDate><atom:link href="https://blog.treesir.pub/tags/mcp/index.xml" rel="self" type="application/rss+xml"/><item><title>每日技术实践简报 - 2026-03-28：从 MCP 到一键 APK 发布的 Skill 封装</title><link>https://blog.treesir.pub/posts/daily-practice-2026-03-28/</link><pubDate>Sat, 28 Mar 2026 23:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-03-28/</guid><description>&lt;h2 class="relative group">推荐阅读
&lt;div id="推荐阅读" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e9%98%85%e8%af%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/daily-practice-2026-03-27/">每日技术实践简报 - 2026-03-27&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/openclaw-ai-agent-architecture-v2/">OpenClaw AI Agent 架构解析：多引擎联动与记忆系统&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">今日技术实践
&lt;div id="今日技术实践" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%8a%e6%97%a5%e6%8a%80%e6%9c%af%e5%ae%9e%e8%b7%b5" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Teambition MCP 全链路打通&lt;/strong>：验证了 &lt;code>BatchGetFileDetails&lt;/code>、&lt;code>ListTaskActivitiesV3&lt;/code>、&lt;code>PostV3MemberQuery&lt;/code> 三个核心 API 的完整调用链路，解决了从任务评论中提取附件信息的需求。&lt;/li>
&lt;li>&lt;strong>成员 ID 映射机制&lt;/strong>：建立了项目成员 ObjectId → 真实姓名的映射表（37人），支持&amp;quot;陌生 ID 自动触发全量刷新&amp;quot;的缓存策略，让任务动态终于可读了。&lt;/li>
&lt;li>&lt;strong>tb-apk-uploader Skill 封装&lt;/strong>：将&amp;quot;TB附件获取 → 下载 → 重命名 → 上传 Nexus → 返回链接&amp;quot;的完整流程封装为独立 Skill，经 skill-creator 规范优化并打包验证通过。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">学到的新东西
&lt;div id="学到的新东西" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ad%a6%e5%88%b0%e7%9a%84%e6%96%b0%e4%b8%9c%e8%a5%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>mcporter 调用参数格式&lt;/strong>：&lt;code>mcporter call&lt;/code> 必须用 &lt;code>--args&lt;/code> 传参且包在 &lt;code>requestBody&lt;/code> 里，用 &lt;code>--body&lt;/code> 会报 SyntaxError。这是踩了一个小时的坑才找到的。&lt;/li>
&lt;li>&lt;strong>Skill 封装规范&lt;/strong>：frontmatter description 要包含完整触发词，body 只保留工作流程和脚本用法，不要重复 frontmatter 信息。渐进式披露，核心逻辑在脚本里。&lt;/li>
&lt;li>&lt;strong>APK 文件名标准化规则&lt;/strong>：TB 附件下载后经常带 &lt;code>.1&lt;/code> 后缀、&lt;code>(1)&lt;/code> 括号、&lt;code>E&lt;/code> 前缀，需要正则清洗。如 &lt;code>RinoTrack_E4218_3.2.820260326_release(1).apk.1&lt;/code> → &lt;code>RinoTrack_4218_3.2.820260326_release.apk&lt;/code>。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">实际产出
&lt;div id="实际产出" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%9e%e9%99%85%e4%ba%a7%e5%87%ba" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>成功上传了两个 APK 到 Nexus（RinoTrack 85MB + 微信 248MB）&lt;/li>
&lt;li>自动回复了下载链接到 DO-6456 评论区&lt;/li>
&lt;li>tb-apk-uploader Skill 打包为 &lt;code>.skill&lt;/code> 文件，可分发复用&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">踩坑记录
&lt;div id="踩坑记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%b8%a9%e5%9d%91%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>mcporter 参数格式&lt;/strong>：&lt;code>--body&lt;/code> → &lt;code>--args&lt;/code> + &lt;code>requestBody&lt;/code> 包装&lt;/li>
&lt;li>&lt;strong>Nexus 重复上传&lt;/strong>：同一文件重复上传返回 HTTP 400，不是错误而是&amp;quot;已存在&amp;quot;，需要正确处理&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">其他思考
&lt;div id="其他思考" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%85%b6%e4%bb%96%e6%80%9d%e8%80%83" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>骑行语音 AI 助手项目构思（代号备选 CADENCE），核心场景：骑行中记录灵感 + 处理工作任务，已创建滴答清单任务储备。&lt;/li>
&lt;li>讨论了 DevOps/SRE 在 AI 时代的转型方向，核心结论：不需要转行，需要在现有方向上叠加 AI 能力。&lt;/li>
&lt;/ul></description></item><item><title>从 MCP 到一键发包：把 Teambition 评论里的 APK 自动上传 Nexus 的那些坑</title><link>https://blog.treesir.pub/posts/from-mcp-to-one-click-release-ai-agent-automation/</link><pubDate>Sun, 29 Mar 2026 10:30:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/from-mcp-to-one-click-release-ai-agent-automation/</guid><description>&lt;h2 class="relative group">推荐阅读
&lt;div id="推荐阅读" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e9%98%85%e8%af%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/daily-practice-2026-03-28/">每日技术实践简报 - 2026-03-28&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/openclaw-ai-agent-architecture-v2/">OpenClaw AI Agent 架构解析：多引擎联动与记忆系统&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/ai-agent-workflow-practice/">当 AI Agent 遇上运维自动化：我的实践踩坑之路&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 class="relative group">目录
&lt;div id="目录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%9b%ae%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="#%e7%9b%ae%e6%a0%87%e6%8a%8a%e6%89%8b%e5%b7%a5%e7%82%b9%e7%82%b9%e7%82%b9%e5%8f%98%e6%88%90%e5%8f%af%e5%a4%8d%e7%94%a8%e9%93%be%e8%b7%af">目标：把&amp;quot;手工点点点&amp;quot;变成可复用链路&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#%e6%8a%80%e6%9c%af%e6%96%b9%e6%a1%88%e4%b8%ba%e4%bb%80%e4%b9%88%e9%80%89-mcp--skill">技术方案：为什么选 MCP + Skill&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#%e5%ae%9e%e6%88%98%e4%bb%8e-mcporter-%e8%b0%83%e9%80%9a%e7%ac%ac%e4%b8%80%e6%9d%a1%e9%93%be%e8%b7%af">实战：从 mcporter 调通第一条链路&lt;/a>
&lt;ul>
&lt;li>&lt;a
href="#%e7%ac%ac%e4%b8%80%e4%b8%aa%e5%9d%91mcporter-%e7%9a%84%e5%8f%82%e6%95%b0%e6%a0%bc%e5%bc%8f">第一个坑：mcporter 的参数格式&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#%e6%8b%bf%e8%af%84%e8%ae%ba%e5%92%8c%e9%99%84%e4%bb%b6listtaskactivitiesv3">拿评论和附件：ListTaskActivitiesV3&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#%e7%ac%ac%e4%ba%8c%e4%b8%aa%e5%9d%91%e6%88%90%e5%91%98-id-%e5%85%a8%e6%98%af-objectid">第二个坑：成员 ID 全是 ObjectId&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#%e7%ac%ac%e4%b8%89%e4%b8%aa%e5%9d%91apk-%e6%96%87%e4%bb%b6%e5%90%8d%e5%a4%aa%e9%87%8e%e4%ba%86">第三个坑：APK 文件名太野了&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a
href="#skill-%e5%b0%81%e8%a3%85tb-apk-uploader-%e7%9a%84%e6%a0%b8%e5%bf%83%e6%b5%81%e7%a8%8b">Skill 封装：tb-apk-uploader 的核心流程&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#%e6%9c%80%e7%bb%88%e6%95%88%e6%9e%9c%e4%b8%80%e5%8f%a5%e8%af%9d%e5%8f%91%e5%8c%85">最终效果：一句话发包&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#%e8%b8%a9%e5%9d%91%e6%80%bb%e7%bb%93%e5%88%ab%e8%a2%ab%e7%bb%86%e8%8a%82%e6%8b%96%e6%ad%bb">踩坑总结：别被细节拖死&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>这周我被一个很&amp;quot;低级但很费命&amp;quot;的流程折磨了好几次:&lt;/p></description></item></channel></rss>