Skip to main content
Glama
156554395

Tencent Cloud COS MCP Server

by 156554395

upload_file

Upload a single file from your local system to Tencent Cloud Object Storage (COS) for secure cloud storage management.

Instructions

上传单个文件到腾讯云COS

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
custom_domainNo自定义访问域名(可选)
file_pathYes本地文件路径
object_keyNo上传后在COS中的对象键名,如果未提供则使用文件名

Implementation Reference

  • MCP tool handler for 'upload_file': validates local file path existence and delegates upload to cosService.uploadFile, returning formatted success response.
    case 'upload_file': const cleanPath = validateFileExists(args.file_path); const result = await cosService.uploadFile(cleanPath, { key: args.object_key, customDomain: args.custom_domain }); return { content: [ { type: 'text', text: JSON.stringify({ success: true, data: result }, null, 2) } ] };
  • Schema definition for 'upload_file' tool, including input parameters: file_path (required), object_key, custom_domain.
    upload_file: { name: 'upload_file', description: '上传单个文件到腾讯云COS', inputSchema: { type: 'object', properties: { file_path: { type: 'string', description: '本地文件路径' }, object_key: { type: 'string', description: '上传后在COS中的对象键名,如果未提供则使用文件名' }, custom_domain: { type: 'string', description: '自定义访问域名(可选)' } }, required: ['file_path'] } },
  • Core uploadFile method in cosService: handles both small file direct upload and large file slice upload (delegates to _uploadLargeFile if >5MB), manages temp files, returns upload result with URL and metadata.
    async uploadFile(localPath, { key = null, customDomain = null, useSliceUpload = false, chunkSize = 1024 * 1024, // 1MB concurrency = 3, onProgress = null } = {}) { this._checkConfig(); try { // 获取文件状态 const stats = await fs.stat(localPath); const fileSize = stats.size; // 生成key,如果没提供则使用文件名 const objectKey = key || path.basename(localPath); // 判断是否使用分片上传 (文件大于5MB或强制指定) const shouldUseSliceUpload = useSliceUpload || fileSize > (5 * 1024 * 1024); if (shouldUseSliceUpload) { return await this._uploadLargeFile(localPath, objectKey, { customDomain, chunkSize, concurrency, onProgress, fileSize }); } // 小文件直接上传 const buffer = await fs.readFile(localPath); const params = { Bucket: this.config.Bucket, Region: this.config.Region, Key: objectKey, Body: buffer, }; const response = await this.cos.putObject(params); // 上传成功后清理相关临时文件 try { await this._cleanupUploadTempFiles(objectKey); } catch (clearErr) { // 清理临时文件失败时静默处理,不影响上传成功的结果 } // 生成访问URL const domain = customDomain || this.config.Domain || `https://${this.config.Bucket}.cos.${this.config.Region}.myqcloud.com`; const fileUrl = `${domain}/${objectKey}`; return { success: true, url: fileUrl, key: objectKey, etag: response.ETag, location: response.Location, size: fileSize, uploadType: 'direct' }; } catch (error) { // 上传失败时,清理可能产生的临时文件 try { await this._cleanupUploadTempFiles(objectKey); } catch (clearErr) { // 清理失败时静默处理 } console.error('上传失败:', error); throw new Error(`文件上传失败: ${error.message}`); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/156554395/tx-cos-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server