{"_id":"@bestzy/mcp-cos-markdown","name":"@bestzy/mcp-cos-markdown","dist-tags":{"latest":"2.0.0"},"versions":{"2.0.0":{"name":"@bestzy/mcp-cos-markdown","version":"2.0.0","description":"A Model Context Protocol server for Tencent COS image upload","type":"module","main":"index.js","bin":{"mcp-cos-markdown":"dist/index.js"},"author":{"name":"jiangzhenyu"},"license":"ISC","keywords":["mcp","cos","tencent-cloud"],"dependencies":{"@modelcontextprotocol/sdk":"^1.11.1","cos-nodejs-sdk-v5":"^2.13.3","dotenv":"^16.4.5","mcp-server":"latest","zod":"^3.24.4"},"devDependencies":{"@types/express":"^4.17.21","@types/jest":"^29.5.12","@types/node":"^22.15.17","eslint":"^9.26.0","jest":"^29.7.0","prettier":"^3.5.3","ts-jest":"^29.1.2","ts-node":"^10.9.2","typescript":"^5.8.3","vitest":"^3.1.3"},"scripts":{"build":"tsc && chmod 755 dist/index.js","start":"node dist/index.js ","dev":"ts-node src/index.ts","test":"vitest"},"_id":"@bestzy/mcp-cos-markdown@2.0.0","_integrity":"sha512-vuiP1KkQ+pMirvNvHvmPnfTq/F5cv/JKBnkE/7YdcfCLGay9t1zQ9vNSoD0pFv/hKidTTUY4S586o3MEQu7qqw==","_resolved":"/private/var/folders/p0/gj7f_y1x0kg87q4s9gy1_4680000gn/T/105c0cf289e6fb87e6151de9c7499c96/bestzy-mcp-cos-markdown-2.0.0.tgz","_from":"file:bestzy-mcp-cos-markdown-2.0.0.tgz","_nodeVersion":"20.18.1","_npmVersion":"10.8.2","dist":{"integrity":"sha512-vuiP1KkQ+pMirvNvHvmPnfTq/F5cv/JKBnkE/7YdcfCLGay9t1zQ9vNSoD0pFv/hKidTTUY4S586o3MEQu7qqw==","shasum":"7e256d8fee8fb353c1e09ea0badb7fabd07f1b82","tarball":"https://registry.npmjs.org/@bestzy/mcp-cos-markdown/-/mcp-cos-markdown-2.0.0.tgz","fileCount":18,"unpackedSize":19794,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICAetUM6OBRpSnew6WHJwd+0jMqWr9EAeREEU7IEG3lkAiAnQmuNhtmJ/LQ/GBndiA3M6cFYbjta/ELUtNv7ql2XeQ=="}]},"_npmUser":{"name":"best-zy","email":"3011543110@qq.com"},"directories":{},"maintainers":[{"name":"best-zy","email":"3011543110@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-cos-markdown_2.0.0_1755940089024_0.9137844826863795"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-23T09:08:08.917Z","2.0.0":"2025-08-23T09:08:09.225Z","modified":"2025-08-23T09:08:09.518Z"},"maintainers":[{"name":"best-zy","email":"3011543110@qq.com"}],"description":"A Model Context Protocol server for Tencent COS image upload","keywords":["mcp","cos","tencent-cloud"],"author":{"name":"jiangzhenyu"},"license":"ISC","readme":"# COS MCP\n\n## 背景\n\n在输出一些技术文章的时候会遇到引用图片的情况，在前面的做法是将图片复制到 markdown 相同路径下的 `assets` 文件夹，然后在 markdown 中通过相对路径的路径引用。随着图片增多，这种方式带来的缺点是项目的整体体积会变大，而且要时刻注意维护 markdown 文件和图片资源的位置方式，一旦位置或者目录名字发生改变，原来的引用就会失效，因此萌生了一个想法将项目中 markdown 文件存量使用本地图片的方式替换为 CDN 网络图片。\n\n## 技术方案\n\n人工替换的方式简单但是非常繁琐，需要经历查找 -> 图片上传 -> 路径替换这些操作。目前 AI agent 盛行，这些繁琐的事情完全可以交给大语言模型去做，只要定义好这些操作步骤的逻辑就好。目前大语言模型调用外部工具的方式有两种：Function call、Model Context Protocol（MCP）。Function call 需要对不同大模型做适配工作，而 MCP 是较为通用的通信协议，提供了一个标准化的方法让模型去连接数据源和工作，因此本次是基于 MCP 去实现一个 COS 工具\n\n1. 引入必要的模块：fs、path、COS SDK、dotenv等。\n\n2. 配置COS客户端，使用环境变量或配置对象。\n\n3. 读取Markdown文件内容。\n\n4. 使用正则表达式提取所有图片路径。\n\n5. 过滤出本地图片，处理路径问题。\n\n6. 异步上传每个图片到COS，记录新的URL。\n\n7. 替换原Markdown中的图片路径。\n\n8. 写入新的Markdown文件。\n\n9. 处理错误，提供友好的提示信息。\n\n10. 提供使用说明和注意事项，帮助用户正确使用脚本\n\n最后，测试脚本，确保所有功能正常，处理各种边缘情况，比如图片不存在、上传失败、网络问题等，并给出相应的提示信息\n\n## 项目启动\n\n```bash\n# 克隆项目\ngit clone https://github.com/yourusername/cos-mcp.git\ncd cos-mcp\n\n# 安装依赖\npnpm install\n\n# 配置环境变量\ncp .env.example .env\n# 编辑 .env 文件，填入你的腾讯云 COS 配置信息\n```\n\n## 配置\n\n在 `.env` 文件中配置以下环境变量：\n\n```env\n# 腾讯云 COS 配置\nCOS_SECRET_ID=your_secret_id\nCOS_SECRET_KEY=your_secret_key\nCOS_REGION=ap-guangzhou\nCOS_BUCKET=your_bucket_name\n\n# 服务器配置\nPORT=3000\n```\n\n## 使用\n\n1. 启动服务器：\n\n```bash\npnpm dev\n```\n\n2. 服务器将在 http://localhost:3000/mcp 提供 MCP 服务\n\n3. 可用的工具：\n\n- `uploadImageToCOS`: 上传单个图片到 COS\n- `processMarkdownFile`: 处理整个 Markdown 文件，替换所有本地图片为 COS URL\n\n## 开发\n\n```bash\n# 构建项目\npnpm build\n\n# 运行测试\npnpm test\n```\n\n## 注意事项\n\n1. 确保有足够的腾讯云 COS 存储空间\n2. 建议在测试环境中先进行测试\n3. 处理大文件时注意内存使用\n4. 建议定期备份原始文件\n","readmeFilename":"README.md","_rev":"1-ea910ebb3d0674a8871ea619fe073a46"}