cos-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,87 @@
1
+ # 腾讯云COS MCP Server 🚀🚀🚀
2
+
3
+ > 基于MCP协议的腾讯云COS MCP Server,无需编码即可让大模型快速接入腾讯云存储(COS)和数据万象(CI)能力
4
+
5
+ ## ✨ 核心功能
6
+
7
+ ### 云端存储能力
8
+ - ⬆️ 文件上传到云端
9
+ - ⬇️ 文件从云端下载
10
+ - 📋 获取云端文件列表
11
+
12
+ ### 云端处理能力
13
+
14
+ - 🖼️ 获取图片信息
15
+ - 🔍 图片超分辨率
16
+ - ✂️ 图片裁剪
17
+ - 📲 二维码识别
18
+ - 🏆 图片质量评估
19
+ - 🅰️ 文字水印
20
+ - 🎬 元数据/自然语言检索(MateInsight)
21
+ - 📄 文档转PDF
22
+ - 🎥 视频封面
23
+
24
+ ## 💡 典型应用场景
25
+ - 使用其他MCP能力获取的文本/图片/视频/音频等数据,可以直接上传到COS云端存储
26
+ - 本地数据快速通过大模型转存到COS云端存储/备份
27
+ - 通过大模型实现自动化:将网页里的视频/图片/音频/文本等数据批量转存到COS云端存储
28
+ - 自动化将视频/图片/音频/文本等数据在云端处理,并转存到COS云端存储
29
+
30
+
31
+ ## 🌟 功能示例
32
+ 1. 上传文件到COS
33
+ ![alt text](./src/img/eg1.png)
34
+ 2. 图片质量评估
35
+ ![alt text](./src/img/eg3.png)
36
+ 3. 自然语言检索图片
37
+ ![alt text](./src/img/eg2.png)
38
+ 4. 视频截帧
39
+ ![alt text](./src/img/eg15.png)
40
+ # 🔧 安装使用
41
+ ![alt text](./src/img/eg0.png)
42
+
43
+
44
+ ## 从npx启动
45
+
46
+ 在大模型内使用时(cline,cursor等), 需要在mcp.json 中配置
47
+ ```
48
+ {
49
+ "servers": {
50
+ "cos-mcp": {
51
+ "command": "npx",
52
+ "args": [
53
+ "cos-mcp",
54
+ "--cos-config='{\"Region\":\"yourRegion\",\"Bucket\":\"yourBucket\",\"SecretId\":\"yourSecretId\",\"SecretKey\":\"yourSecretKey\",\"DatasetName\":\"yourDatasetname\"}'",
55
+ "--port=9000",
56
+ "--connectType=stdio"
57
+ ]
58
+ }
59
+ }
60
+ }
61
+
62
+
63
+ ```
64
+
65
+ ## 使用npm安装
66
+ ```
67
+ // 安装
68
+ npm install -g cos-mcp
69
+
70
+ // 运行
71
+ npx cos-mcp --cos-config='{"Region":"yourRegion","Bucket":"BucketName-APPID","SecretId":"yourSecretId","SecretKey":"yourSecretKey","DatasetName":"datasetName"}' --port=3001 --connectType=stdio
72
+
73
+ // 参数说明:
74
+ // connectType 代表连接方式,可以是stdio (本地) 或 sse (远程)
75
+ // port 代表监听端口(sse模式有用)
76
+ // SecretId 和 SecretKey 可以从腾讯云COS https://console.cloud.tencent.com/cam/capi 获取
77
+ // bucket 是存储的桶名称
78
+ // region 是存储桶所在的区域
79
+
80
+ ```
81
+
82
+
83
+ ## 📞 联系我们
84
+ 如需其他功能支持,请联系企业微信:
85
+ - @mulinli
86
+ - @shawnmzhang
87
+ - @weiyankong
package/dist/index.js ADDED
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { createCosMcpServer, startWithSSE } from "./server.js";
4
+ import { config } from "dotenv";
5
+ import { resolve } from "path";
6
+ import yargs from "yargs";
7
+ import { hideBin } from "yargs/helpers";
8
+ import { z } from "zod";
9
+ import { maskSecret } from "./server.js";
10
+ // COS配置验证Schema
11
+ export const cosConfigSchema = z.object({
12
+ Region: z.string(),
13
+ SecretId: z.string(),
14
+ SecretKey: z.string(),
15
+ Bucket: z.string(),
16
+ DatasetName: z.string().optional()
17
+ });
18
+ // 加载当前工作目录中的.env文件
19
+ config({ path: resolve(process.cwd(), ".env") });
20
+ function getConfig() {
21
+ const argv = yargs(hideBin(process.argv))
22
+ .options({
23
+ "cos-config": {
24
+ type: "string",
25
+ description: "COS配置的JSON",
26
+ },
27
+ port: {
28
+ type: "number",
29
+ description: "server运行端口",
30
+ },
31
+ connectType: {
32
+ type: "string",
33
+ description: "连接类型",
34
+ choices: ["stdio", "sse"],
35
+ },
36
+ })
37
+ .help()
38
+ .version("0.0.1")
39
+ .parseSync();
40
+ // 首先从命令行中获取
41
+ let config = {
42
+ port: 3001,
43
+ cosConfig: {
44
+ Region: "",
45
+ SecretId: "",
46
+ SecretKey: "",
47
+ Bucket: "",
48
+ DatasetName: ""
49
+ },
50
+ connectType: "stdio",
51
+ };
52
+ // 必要参数
53
+ // SecretId SecretKey bucket region connectType
54
+ // 从环境变量中获取端口
55
+ if (argv.port) {
56
+ config.port = argv.port;
57
+ }
58
+ else if (process.env.port) {
59
+ config.port = Number(process.env.port);
60
+ }
61
+ if (argv.connectType) {
62
+ config.connectType = argv.connectType;
63
+ }
64
+ else if (process.env.connectType) {
65
+ config.connectType = process.env.connectType;
66
+ }
67
+ if (argv["cos-config"]) {
68
+ config.cosConfig = JSON.parse(argv["cos-config"]);
69
+ }
70
+ else if (process.env.cosConfig) {
71
+ config.cosConfig = JSON.parse(process.env.cosConfig);
72
+ }
73
+ // 验证配置
74
+ if (!config.cosConfig.SecretId || !config.cosConfig.SecretKey || !config.cosConfig.Bucket || !config.cosConfig.Region) {
75
+ console.error("COS配置不全。请使用cos-config参数指定COS配置");
76
+ }
77
+ if (config.connectType !== "stdio") {
78
+ console.log("\nCOS配置信息:");
79
+ console.log(`- 端口: ${config.port}`);
80
+ console.log(`- 运行模式: ${config.connectType}`);
81
+ console.log("- cos配置:");
82
+ Object.keys(config.cosConfig).forEach((key) => {
83
+ let value = config.cosConfig[key];
84
+ if (key === "SecretId" || key === "SecretKey") {
85
+ value = maskSecret(value);
86
+ }
87
+ console.log(` - ${key}: ${value}`);
88
+ });
89
+ console.log("\n");
90
+ }
91
+ return config;
92
+ }
93
+ async function startCOServer() {
94
+ const config = getConfig();
95
+ // 创建COS MCP
96
+ const server = createCosMcpServer(config);
97
+ if (config.connectType === "stdio") {
98
+ // 使用stdio:标准输入输出进行通信
99
+ const transport = new StdioServerTransport();
100
+ await server.connect(transport);
101
+ return;
102
+ }
103
+ // 使用SSE:Server-Sent Events进行通信
104
+ startWithSSE(server, config.port || 3001);
105
+ }
106
+ startCOServer().catch((error) => {
107
+ console.error("启动失败", error);
108
+ process.exit(1);
109
+ });
110
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/server.js ADDED
@@ -0,0 +1,339 @@
1
+ import express from "express";
2
+ import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
3
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
+ import { z } from "zod";
5
+ import COS from "cos-nodejs-sdk-v5";
6
+ import { CosService } from "./services/cos/cos.service.js";
7
+ import { CIPicService } from "./services/ci/pic.service.js";
8
+ import { CIMediaService } from "./services/ci/media.service.js";
9
+ import { CIAIService } from "./services/ci/ai.service.js";
10
+ import { CIMateInsightService } from "./services/ci/mateInsight.service.js";
11
+ import { CIDocService } from "./services/ci/doc.service.js";
12
+ export function maskSecret(secret) {
13
+ if (secret.length <= 4)
14
+ return "****";
15
+ return `${secret.substring(0, 4)}****${secret.slice(-4)}`;
16
+ }
17
+ export const Logger = {
18
+ log: (...args) => {
19
+ console.log(...args);
20
+ },
21
+ error: (...args) => {
22
+ console.error(...args);
23
+ },
24
+ };
25
+ export function createCosMcpServer(config) {
26
+ const cos = new COS({
27
+ SecretId: config.cosConfig?.SecretId || "",
28
+ SecretKey: config.cosConfig?.SecretKey || "",
29
+ });
30
+ const bucket = config.cosConfig.Bucket;
31
+ const region = config.cosConfig.Region;
32
+ const datasetName = config.cosConfig.DatasetName;
33
+ const COSInstance = new CosService(bucket, region, cos);
34
+ const CIPicInstance = new CIPicService(bucket, region, cos);
35
+ const CIMediaInstance = new CIMediaService(bucket, region, cos);
36
+ const CIAIInstance = new CIAIService(bucket, region, cos);
37
+ const CIMateInsightInstance = new CIMateInsightService(bucket, region, datasetName || "", cos);
38
+ const CIDocInstance = new CIDocService(bucket, region, cos);
39
+ const server = new McpServer({
40
+ name: "COS MCP Server",
41
+ version: "1.0.0",
42
+ }, {
43
+ capabilities: {
44
+ tools: { listChanged: true },
45
+ // resources: { listChanged: true },
46
+ // prompts: { listChanged: true },
47
+ // logging: {},
48
+ },
49
+ });
50
+ server.tool("getCosConfig", "获取COS配置, 腾讯云配置", {}, async () => {
51
+ if (config.cosConfig) {
52
+ config.cosConfig.SecretId = maskSecret(config.cosConfig.SecretId);
53
+ config.cosConfig.SecretKey = maskSecret(config.cosConfig.SecretKey);
54
+ }
55
+ return {
56
+ content: [
57
+ {
58
+ type: "text",
59
+ text: JSON.stringify(config, null, 2),
60
+ },
61
+ ],
62
+ };
63
+ });
64
+ server.tool("putObject", "上传文件到存储桶", {
65
+ filePath: z.string().describe("文件路径 (包含文件名)"),
66
+ fileName: z.string().optional().describe("文件名 (存在存储桶里的名称)"),
67
+ targetDir: z.string().optional().describe("目标目录 (存在存储桶的哪个目录)"),
68
+ }, async ({ fileName, filePath, targetDir }, extra) => {
69
+ const res = await COSInstance.uploadFile({
70
+ fileName,
71
+ filePath,
72
+ targetDir,
73
+ });
74
+ return {
75
+ content: [
76
+ {
77
+ type: "text",
78
+ text: JSON.stringify(res.data, null, 2),
79
+ isError: res.isSuccess ? false : true,
80
+ },
81
+ ],
82
+ };
83
+ });
84
+ server.tool("getObject", "下载存储桶内的文件", {
85
+ objectKey: z.string().describe("文件的路径"),
86
+ }, async ({ objectKey = "/" }) => {
87
+ const res = await COSInstance.getObject(objectKey);
88
+ return {
89
+ content: [
90
+ {
91
+ type: "text",
92
+ text: JSON.stringify(res.data, null, 2),
93
+ isError: res.isSuccess ? false : true,
94
+ },
95
+ ],
96
+ };
97
+ });
98
+ server.tool("getBucket", "查询存储桶内的文件列表", {
99
+ Prefix: z.string().optional().describe("文件列表的路径前缀,默认根路径"),
100
+ }, async ({ Prefix = "" }) => {
101
+ const res = await COSInstance.getBucket(Prefix);
102
+ return {
103
+ content: [
104
+ {
105
+ type: "text",
106
+ text: JSON.stringify(res.data, null, 2),
107
+ isError: res.isSuccess ? false : true,
108
+ },
109
+ ],
110
+ };
111
+ });
112
+ // server.tool(
113
+ // "getObjectUrl",
114
+ // "私有读, 获取带签名的 url",
115
+ // {
116
+ // ObjectKey: z.string().optional().describe("文件在存储桶里的路径"),
117
+ // },
118
+ // async ({ ObjectKey = "" }) => {
119
+ // const res = await COSInstance.getObjectUrl(ObjectKey);
120
+ // return {
121
+ // content: [
122
+ // {
123
+ // type: "text",
124
+ // text: JSON.stringify(res.data, null, 2),
125
+ // isError: res.isSuccess ? false : true,
126
+ // },
127
+ // ],
128
+ // };
129
+ // }
130
+ // );
131
+ // --CI--
132
+ server.tool("imageInfo", "图片处理-获取图片信息", {
133
+ objectKey: z.string().describe("图片在存储桶里的路径"),
134
+ }, async ({ objectKey }) => {
135
+ const res = await CIPicInstance.imageInfo(objectKey);
136
+ return {
137
+ content: [
138
+ {
139
+ type: "text",
140
+ text: JSON.stringify(res.data, null, 2),
141
+ isError: res.isSuccess ? false : true,
142
+ },
143
+ ],
144
+ };
145
+ });
146
+ server.tool("assessQuality", "图片处理-图片质量评估", {
147
+ objectKey: z.string().describe("图片在存储桶里的路径"),
148
+ }, async ({ objectKey }) => {
149
+ const res = await CIAIInstance.assessQuality(objectKey);
150
+ return {
151
+ content: [
152
+ {
153
+ type: "text",
154
+ text: JSON.stringify(res.data, null, 2),
155
+ isError: res.isSuccess ? false : true,
156
+ },
157
+ ],
158
+ };
159
+ });
160
+ server.tool("aiSuperResolution", "图片处理-超分辨率", {
161
+ objectKey: z.string().describe("图片在存储桶里的路径"),
162
+ }, async ({ objectKey }) => {
163
+ const res = await CIAIInstance.aiSuperResolution(objectKey);
164
+ return {
165
+ content: [
166
+ {
167
+ type: "text",
168
+ text: JSON.stringify(res.data, null, 2),
169
+ isError: res.isSuccess ? false : true,
170
+ },
171
+ ],
172
+ };
173
+ });
174
+ server.tool("aiPicMatting", "图片处理-抠图", {
175
+ objectKey: z.string().describe("图片在存储桶里的路径"),
176
+ width: z.string().optional().describe("宽度"),
177
+ height: z.string().optional().describe("高度"),
178
+ }, async ({ objectKey, width = "5", height = "5" }) => {
179
+ const res = await CIAIInstance.aiPicMatting(objectKey, width, height);
180
+ return {
181
+ content: [
182
+ {
183
+ type: "text",
184
+ text: JSON.stringify(res.data, null, 2),
185
+ isError: res.isSuccess ? false : true,
186
+ },
187
+ ],
188
+ };
189
+ });
190
+ server.tool("aiQrcode", "图片处理-二维码识别-识别存储桶内二维码图片内容", {
191
+ objectKey: z.string().describe("COS对象键(完整路径)示例: images/qrcode.jpg"),
192
+ }, async ({ objectKey }) => {
193
+ const res = await CIAIInstance.aiQrcode(objectKey);
194
+ return {
195
+ content: [
196
+ {
197
+ type: "text",
198
+ text: JSON.stringify(res.data, null, 2),
199
+ isError: res.isSuccess ? false : true,
200
+ },
201
+ ],
202
+ };
203
+ });
204
+ server.tool("waterMarkFont", "生成带文字水印的图片", {
205
+ objectKey: z.string().describe("COS对象键(完整路径)示例: images/photo.jpg"),
206
+ text: z.string().describe("水印文字内容(支持中文)").default("test"),
207
+ }, async ({ objectKey, text }) => {
208
+ const res = await CIPicInstance.waterMarkFont({ objectKey, text });
209
+ return {
210
+ content: [
211
+ {
212
+ type: "text",
213
+ text: JSON.stringify(res.data, null, 2),
214
+ isError: res.isSuccess ? false : true,
215
+ },
216
+ ],
217
+ };
218
+ });
219
+ // --MEDIA--
220
+ server.tool("createMediaSmartCoverJob", "创建媒体智能封面任务", {
221
+ objectKey: z.string().describe("对象在存储桶里的路径"),
222
+ }, async ({ objectKey }) => {
223
+ const res = await CIMediaInstance.createMediaSmartCoverJob(objectKey);
224
+ return {
225
+ content: [
226
+ {
227
+ type: "text",
228
+ text: JSON.stringify(res.data, null, 2),
229
+ isError: res.isSuccess ? false : true,
230
+ },
231
+ ],
232
+ };
233
+ });
234
+ server.tool("describeMediaJob", "根据 jobid 查询指定的媒体智能封面任务结果", {
235
+ jobId: z.string().describe("要查询的任务ID,可通过提交智能封面任务的响应中获取。"),
236
+ }, async ({ jobId }) => {
237
+ const res = await CIMediaInstance.describeMediaJob(jobId);
238
+ return {
239
+ content: [
240
+ {
241
+ type: "text",
242
+ text: JSON.stringify(res.data, null, 2),
243
+ isError: res.isSuccess ? false : true,
244
+ },
245
+ ],
246
+ };
247
+ });
248
+ // --METAINSIGHT--
249
+ server.tool("imageSearchPic", "根据输入的图片,从数据集中检索出与输入的图片内容相似的图片", {
250
+ uri: z.string().describe("图片地址"),
251
+ }, async ({ uri }) => {
252
+ const res = await CIMateInsightInstance.imageSearchPic({ uri });
253
+ return {
254
+ content: [
255
+ {
256
+ type: "text",
257
+ text: JSON.stringify(res.data, null, 2),
258
+ isError: res.isSuccess ? false : true,
259
+ },
260
+ ],
261
+ };
262
+ });
263
+ server.tool("imageSearchText", "根据输入的文本内容,从数据集中检索出与输入的文本内容相符的图片", {
264
+ text: z.string().describe("检索的文本"),
265
+ }, async ({ text }) => {
266
+ const res = await CIMateInsightInstance.imageSearchText({ text });
267
+ return {
268
+ content: [
269
+ {
270
+ type: "text",
271
+ text: JSON.stringify(res.data, null, 2),
272
+ isError: res.isSuccess ? false : true,
273
+ },
274
+ ],
275
+ };
276
+ });
277
+ // --DOCMENT--
278
+ server.tool("createDocToPdfJob", "创建文档转 pdf 处理任务", {
279
+ objectKey: z.string().describe("对象在存储桶里的路径"),
280
+ }, async ({ objectKey }) => {
281
+ const res = await CIDocInstance.createDocToPdfJobs(objectKey);
282
+ return {
283
+ content: [
284
+ {
285
+ type: "text",
286
+ text: JSON.stringify(res.data, null, 2),
287
+ isError: res.isSuccess ? false : true,
288
+ },
289
+ ],
290
+ };
291
+ });
292
+ server.tool("describeDocProcessJob", "根据 jobid 查询指定的文档转码任务结果", {
293
+ jobId: z.string().describe("要查询的任务ID,可通过提交文档任务的响应中获取。"),
294
+ }, async ({ jobId }) => {
295
+ const res = await CIDocInstance.describeDocProcessJob(jobId);
296
+ return {
297
+ content: [
298
+ {
299
+ type: "text",
300
+ text: JSON.stringify(res.data, null, 2),
301
+ isError: res.isSuccess ? false : true,
302
+ },
303
+ ],
304
+ };
305
+ });
306
+ return server;
307
+ }
308
+ export function startWithSSE(server, port = 3001) {
309
+ const app = express();
310
+ // to support multiple simultaneous connections we have a lookup object from
311
+ // sessionId to transport
312
+ const transports = {};
313
+ app.get("/sse", async (_, res) => {
314
+ const transport = new SSEServerTransport("/messages", res);
315
+ transports[transport.sessionId] = transport;
316
+ res.on("close", () => {
317
+ delete transports[transport.sessionId];
318
+ });
319
+ await server.connect(transport);
320
+ });
321
+ app.post("/messages", async (req, res) => {
322
+ const sessionId = req.query.sessionId;
323
+ const transport = transports[sessionId];
324
+ if (transport) {
325
+ await transport.handlePostMessage(req, res);
326
+ }
327
+ else {
328
+ res.status(400).send("No transport found for sessionId");
329
+ }
330
+ });
331
+ app.listen(port, () => {
332
+ Logger.log = console.log;
333
+ Logger.error = console.error;
334
+ Logger.log(`SSE模式监听端口: ${port}`);
335
+ Logger.log(`SSE: http://localhost:${port}/sse`);
336
+ Logger.log(`消息: http://localhost:${port}/messages`);
337
+ });
338
+ }
339
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}