volcengine-api-mcp 0.0.0-stage → 0.1.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.
Files changed (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +93 -2
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.js +44 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/ark.d.ts +28 -0
  7. package/dist/lib/ark.js +105 -0
  8. package/dist/lib/ark.js.map +1 -0
  9. package/dist/lib/auc.d.ts +67 -0
  10. package/dist/lib/auc.js +160 -0
  11. package/dist/lib/auc.js.map +1 -0
  12. package/dist/lib/client.d.ts +18 -0
  13. package/dist/lib/client.js +117 -0
  14. package/dist/lib/client.js.map +1 -0
  15. package/dist/lib/index.d.ts +8 -0
  16. package/dist/lib/index.js +9 -0
  17. package/dist/lib/index.js.map +1 -0
  18. package/dist/lib/search.d.ts +41 -0
  19. package/dist/lib/search.js +160 -0
  20. package/dist/lib/search.js.map +1 -0
  21. package/dist/lib/signer.d.ts +17 -0
  22. package/dist/lib/signer.js +58 -0
  23. package/dist/lib/signer.js.map +1 -0
  24. package/dist/lib/tos.d.ts +29 -0
  25. package/dist/lib/tos.js +93 -0
  26. package/dist/lib/tos.js.map +1 -0
  27. package/dist/lib/tts.d.ts +59 -0
  28. package/dist/lib/tts.js +126 -0
  29. package/dist/lib/tts.js.map +1 -0
  30. package/dist/lib/types.d.ts +34 -0
  31. package/dist/lib/types.js +15 -0
  32. package/dist/lib/types.js.map +1 -0
  33. package/dist/tools/auc.d.ts +34 -0
  34. package/dist/tools/auc.js +76 -0
  35. package/dist/tools/auc.js.map +1 -0
  36. package/dist/tools/image.d.ts +37 -0
  37. package/dist/tools/image.js +58 -0
  38. package/dist/tools/image.js.map +1 -0
  39. package/dist/tools/search.d.ts +38 -0
  40. package/dist/tools/search.js +56 -0
  41. package/dist/tools/search.js.map +1 -0
  42. package/dist/tools/tos.d.ts +30 -0
  43. package/dist/tools/tos.js +38 -0
  44. package/dist/tools/tos.js.map +1 -0
  45. package/dist/tools/tts.d.ts +43 -0
  46. package/dist/tools/tts.js +80 -0
  47. package/dist/tools/tts.js.map +1 -0
  48. package/package.json +48 -3
@@ -0,0 +1,80 @@
1
+ import { z } from 'zod';
2
+ import { mkdirSync, statSync, writeFileSync } from 'node:fs';
3
+ import { dirname, resolve } from 'node:path';
4
+ import { TTS_DEFAULT_RESOURCE_ID, TTS_DEFAULT_SAMPLE_RATE, TTS_DEFAULT_SPEAKER, unidirectionalTts, } from '../lib/index.js';
5
+ const AUDIO_MIME = {
6
+ mp3: 'audio/mpeg',
7
+ pcm: 'audio/pcm',
8
+ ogg_opus: 'audio/ogg',
9
+ wav: 'audio/wav',
10
+ };
11
+ function resolveArkApiKey() {
12
+ const key = process.env.ARK_API_KEY;
13
+ if (!key?.trim() || !/^ark-[A-Za-z0-9-]+$/.test(key.trim())) {
14
+ throw new Error('缺少有效的方舟 API Key(ark- 开头),请配置环境变量 ARK_API_KEY');
15
+ }
16
+ return key.trim();
17
+ }
18
+ export const ttsUnidirectionalTool = {
19
+ name: 'plan_tts_unidirectional',
20
+ description: '火山豆包语音合成大模型-单向流式(端点 /api/v3/plan/tts/unidirectional,HTTP Chunked)。输入文本一次性合成音频,落盘并返回给 Agent。' +
21
+ '默认音色 zh_female_vv_uranus_bigtts(豆包 2.0 通用女声),音色 ID 从控制台>音色库获取;复刻音色需 resource_id=seed-icl-2.0 并传 model。' +
22
+ '需要环境变量 ARK_API_KEY。',
23
+ inputSchema: {
24
+ text: z.string().min(1).describe('待合成的文本'),
25
+ output_path: z.string().min(1).describe('音频保存的绝对路径(扩展名与 format 一致,如 .mp3/.wav/.ogg/.pcm)'),
26
+ speaker: z.string().optional().describe(`音色 ID,默认 ${TTS_DEFAULT_SPEAKER}`),
27
+ resource_id: z.string().optional().describe(`模型版本资源,默认 ${TTS_DEFAULT_RESOURCE_ID};声音复刻用 seed-icl-2.0`),
28
+ model: z.string().optional().describe('复刻音色时需指定,如 seed-tts-2.0-standard'),
29
+ format: z.enum(['mp3', 'pcm', 'ogg_opus', 'wav']).optional().describe('音频格式,默认 mp3'),
30
+ sample_rate: z.number().int().optional().describe(`采样率 Hz,默认 ${TTS_DEFAULT_SAMPLE_RATE};ogg_opus 仅支持 48000`),
31
+ speech_rate: z.number().int().min(-50).max(100).optional().describe('语速 [-50,100],100 = 2.0 倍速'),
32
+ loudness_rate: z.number().int().min(-50).max(100).optional().describe('音量 [-50,100],100 = 2.0 倍音量'),
33
+ enable_subtitle: z.boolean().optional().describe('启用字幕(字级时间戳),仅中英文'),
34
+ explicit_language: z.string().optional().describe('显式朗读语种,如 zh-cn / en / ja,不传自动检测'),
35
+ },
36
+ handler: async (args) => {
37
+ const result = await unidirectionalTts({
38
+ apiKey: resolveArkApiKey(),
39
+ text: args.text,
40
+ speaker: args.speaker,
41
+ resourceId: args.resource_id,
42
+ model: args.model,
43
+ format: args.format,
44
+ sampleRate: args.sample_rate,
45
+ speechRate: args.speech_rate,
46
+ loudnessRate: args.loudness_rate,
47
+ enableSubtitle: args.enable_subtitle,
48
+ explicitLanguage: args.explicit_language,
49
+ });
50
+ const path = resolve(args.output_path);
51
+ mkdirSync(dirname(path), { recursive: true });
52
+ writeFileSync(path, result.audio);
53
+ const bytes = statSync(path).size;
54
+ if (bytes < 1024) {
55
+ throw new Error(`落盘文件过小(${bytes}B),疑似异常响应`);
56
+ }
57
+ return {
58
+ content: [
59
+ {
60
+ type: 'text',
61
+ text: JSON.stringify({
62
+ ok: true,
63
+ output: path,
64
+ format: result.format,
65
+ sample_rate: result.sampleRate,
66
+ bytes,
67
+ text_words: result.usage?.text_words,
68
+ sentence: result.sentence?.text,
69
+ }, null, 2),
70
+ },
71
+ {
72
+ type: 'audio',
73
+ data: result.audio.toString('base64'),
74
+ mimeType: AUDIO_MIME[result.format] ?? 'audio/mpeg',
75
+ },
76
+ ],
77
+ };
78
+ },
79
+ };
80
+ //# sourceMappingURL=tts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tts.js","sourceRoot":"","sources":["../../src/tools/tts.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,51 @@
1
1
  {
2
2
  "name": "volcengine-api-mcp",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.0",
4
+ "description": "火山引擎 API 的 MCP Server(stdio):方舟生图 / TTS / TOS 上传 / 语音转写 / 联网搜索",
5
+ "license": "MIT",
6
+ "author": "Marvin Pan",
7
+ "keywords": [
8
+ "volcengine",
9
+ "mcp",
10
+ "ark",
11
+ "seedream",
12
+ "doubao",
13
+ "tos",
14
+ "asr",
15
+ "tts",
16
+ "search",
17
+ "model-context-protocol"
18
+ ],
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/panmenglin/volcengine-api-mcp.git"
22
+ },
23
+ "type": "module",
24
+ "main": "dist/index.js",
25
+ "types": "dist/index.d.ts",
26
+ "bin": {
27
+ "volcengine-api-mcp": "dist/index.js"
28
+ },
29
+ "files": [
30
+ "dist"
31
+ ],
32
+ "engines": {
33
+ "node": ">=20"
34
+ },
35
+ "dependencies": {
36
+ "@modelcontextprotocol/sdk": "^1.20.0",
37
+ "@volcengine/tos-sdk": "^2.9.1",
38
+ "zod": "^3.25.0"
39
+ },
40
+ "devDependencies": {
41
+ "@types/node": "^24.0.0",
42
+ "tsx": "^4.20.0",
43
+ "typescript": "^5.9.0"
44
+ },
45
+ "scripts": {
46
+ "build": "tsc -p tsconfig.json",
47
+ "typecheck": "tsc -p tsconfig.json --noEmit",
48
+ "dev": "tsx src/index.ts",
49
+ "start": "node dist/index.js"
50
+ }
6
51
  }