Skip to content

Commit ee80639

Browse files
新增能力 (#426)
* 新增能力 Co-authored-by: Cursor <cursoragent@cursor.com> * fix(mcp): pin fastmcp to 3.2.x for FaaS PyPI mirror compatibility Volcengine mirrors only provide authlib<=1.6.6, while fastmcp>=3.4.0 requires authlib>=1.6.11 and breaks uvx installs on constrained runtimes. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(mcp): unify header/env resolution for multi-tenant runtime config Prefer inbound headers over env for client-facing fields; keep runtime and task source internal via env only; lowercase outbound x-amk-* headers. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(mcp): work around ByteFaaS stale typing_extensions on startup Prefer uvx site-packages over /opt/bytefaas before importing fastmcp and pin typing_extensions>=4.12.2 for TypeForm support. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(mediakit): refresh MCP README with full 79-tool surface Sync tool overview/detail tables, API key guidance, and smart-video wording from the mediakit-interactive product tree. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 6d776b2 commit ee80639

27 files changed

Lines changed: 4260 additions & 1540 deletions

server/mcp_server_mediakit/README.md

Lines changed: 753 additions & 142 deletions
Large diffs are not rendered by default.

server/mcp_server_mediakit/README_zh.md

Lines changed: 758 additions & 147 deletions
Large diffs are not rendered by default.

server/mcp_server_mediakit/pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ description = "MediaKit MCP Server"
99
readme = "README.md"
1010
requires-python = ">=3.11"
1111
dependencies = [
12-
"mcp>=1.12.0",
12+
"fastmcp>=3.2.0,<3.3.0",
1313
"pydantic>=2.0.0",
1414
"httpx>=0.25.0",
1515
"pyyaml>=6.0",
1616
"python-dotenv>=1.0.0",
1717
"retry>=0.9.2",
18+
"typing_extensions>=4.12.2",
1819
]
1920

2021
[project.scripts]

server/mcp_server_mediakit/src/base/__init__.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,28 @@
1-
from .base_mcp import BaseMCP
2-
from .client import MediKitClient, create_client
1+
from .client import ClientConfig, MediakitClient, create_client, resolve_client_config
32
from .constant import (
4-
MEDIAKIT_API_KEY_ENV,
5-
MEDIAKIT_API_KEY_HEADER,
63
DEFAULT_ENDPOINT,
74
ENDPOINT_ENV,
85
ENDPOINT_HEADER,
96
MCP_DOMAINS_ENV,
107
MCP_DOMAINS_HEADER,
118
MCP_TOOLS_ENV,
129
MCP_TOOLS_HEADER,
10+
MEDIAKIT_API_KEY_ENV,
11+
MEDIAKIT_API_KEY_HEADER,
1312
)
13+
from .context import bind_client, get_client
14+
from .registry import domain_tools_map, get_tool_domain, register_domain_tools
1415

1516
__all__ = [
16-
"BaseMCP",
17-
"MediKitClient",
17+
"ClientConfig",
18+
"MediakitClient",
1819
"create_client",
20+
"resolve_client_config",
21+
"bind_client",
22+
"get_client",
23+
"domain_tools_map",
24+
"register_domain_tools",
25+
"get_tool_domain",
1926
"MEDIAKIT_API_KEY_ENV",
2027
"MEDIAKIT_API_KEY_HEADER",
2128
"DEFAULT_ENDPOINT",
Lines changed: 1 addition & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1 @@
1-
api_info = {
2-
"add_image_to_video": {"path": "/api/v1/tools/add-image-to-video", "method": "POST"},
3-
"add_subtitle_to_video": {"path": "/api/v1/tools/add-subtitle-to-video", "method": "POST"},
4-
"adjust_audio_speed": {"path": "/api/v1/tools/adjust-audio-speed", "method": "POST"},
5-
"adjust_video_speed": {"path": "/api/v1/tools/adjust-video-speed", "method": "POST"},
6-
"adjust_video_volume": {"path": "/api/v1/tools/adjust-video-volume", "method": "POST"},
7-
"analyze_video_highlights": {"path": "/api/v1/tools/analyze-video-highlights", "method": "POST"},
8-
"analyze_video_storyline": {"path": "/api/v1/tools/analyze-video-storyline", "method": "POST"},
9-
"apply_video_filter": {"path": "/api/v1/tools/apply-video-filter", "method": "POST"},
10-
"asr_subtitles": {"path": "/api/v1/tools/asr-subtitles", "method": "POST"},
11-
"concat_audio": {"path": "/api/v1/tools/concat-audio", "method": "POST"},
12-
"concat_video": {"path": "/api/v1/tools/concat-video", "method": "POST"},
13-
"enhance_image": {"path": "/api/v1/tools-sync/enhance-image", "method": "POST"},
14-
"enhance_video": {"path": "/api/v1/tools/enhance-video", "method": "POST"},
15-
"enhance_video_generative": {"path": "/api/v1/tools/enhance-video-generative", "method": "POST"},
16-
"erase_image": {"path": "/api/v1/tools-sync/erase-image", "method": "POST"},
17-
"erase_video_subtitle": {"path": "/api/v1/tools/erase-video-subtitle", "method": "POST"},
18-
"erase_video_subtitle_pro": {"path": "/api/v1/tools/erase-video-subtitle-pro", "method": "POST"},
19-
"evaluate_image_quality": {"path": "/api/v1/tools-sync/evaluate-image-quality", "method": "POST"},
20-
"extract_audio": {"path": "/api/v1/tools/extract-audio", "method": "POST"},
21-
"fade_audio": {"path": "/api/v1/tools/fade-audio", "method": "POST"},
22-
"fade_video_audio": {"path": "/api/v1/tools/fade-video-audio", "method": "POST"},
23-
"flip_video": {"path": "/api/v1/tools/flip-video", "method": "POST"},
24-
"generate_highlights_microdrama": {"path": "/api/v1/tools/generate-highlights-microdrama", "method": "POST"},
25-
"generate_highlights_minigame": {"path": "/api/v1/tools/generate-highlights-minigame", "method": "POST"},
26-
"image_ocr": {"path": "/api/v1/tools-sync/image-ocr", "method": "POST"},
27-
"image_to_video": {"path": "/api/v1/tools/image-to-video", "method": "POST"},
28-
"matte_greenscreen_video": {"path": "/api/v1/tools/matte-greenscreen-video", "method": "POST"},
29-
"matte_portrait_video": {"path": "/api/v1/tools/matte-portrait-video", "method": "POST"},
30-
"mix_audio": {"path": "/api/v1/tools/mix-audio", "method": "POST"},
31-
"mux_audio_video": {"path": "/api/v1/tools/mux-audio-video", "method": "POST"},
32-
"probe_audio_metadata": {"path": "/api/v1/tools/probe-audio-metadata", "method": "POST"},
33-
"probe_video_metadata": {"path": "/api/v1/tools/probe-video-metadata", "method": "POST"},
34-
"query_task": {"path": "/api/v1/tasks/{task_id}", "method": "GET"},
35-
"remove_image_background": {"path": "/api/v1/tools-sync/remove-image-background", "method": "POST"},
36-
"segment_scenes": {"path": "/api/v1/tools/segment-scenes", "method": "POST"},
37-
"separate_voice": {"path": "/api/v1/tools/separate-voice", "method": "POST"},
38-
"trim_audio": {"path": "/api/v1/tools/trim-audio", "method": "POST"},
39-
"trim_video": {"path": "/api/v1/tools/trim-video", "method": "POST"},
40-
"video_ocr": {"path": "/api/v1/tools/video-ocr", "method": "POST"},
41-
}
1+
api_info = {'add_image_to_video': {'path': '/api/v1/tools/add-image-to-video', 'method': 'POST'}, 'add_image_watermark': {'path': '/api/v1/tools-sync/add-image-watermark', 'method': 'POST'}, 'add_subtitle_to_video': {'path': '/api/v1/tools/add-subtitle-to-video', 'method': 'POST'}, 'add_video_invisible_watermark': {'path': '/api/v1/tools/add-video-invisible-watermark', 'method': 'POST'}, 'adjust_audio_speed': {'path': '/api/v1/tools/adjust-audio-speed', 'method': 'POST'}, 'adjust_image_color': {'path': '/api/v1/tools-sync/adjust-image-color', 'method': 'POST'}, 'adjust_video_speed': {'path': '/api/v1/tools/adjust-video-speed', 'method': 'POST'}, 'adjust_video_volume': {'path': '/api/v1/tools/adjust-video-volume', 'method': 'POST'}, 'analyze_video_highlights': {'path': '/api/v1/tools/analyze-video-highlights', 'method': 'POST'}, 'analyze_video_storyline': {'path': '/api/v1/tools/analyze-video-storyline', 'method': 'POST'}, 'apply_camera_motion': {'path': '/api/v1/tools/apply-camera-motion', 'method': 'POST'}, 'apply_video_filter': {'path': '/api/v1/tools/apply-video-filter', 'method': 'POST'}, 'asr_subtitles': {'path': '/api/v1/tools/asr-subtitles', 'method': 'POST'}, 'assess_video_quality': {'path': '/api/v1/tools/assess-video-quality', 'method': 'POST'}, 'compress_image': {'path': '/api/v1/tools-sync/compress-image', 'method': 'POST'}, 'concat_audio': {'path': '/api/v1/tools/concat-audio', 'method': 'POST'}, 'concat_video': {'path': '/api/v1/tools/concat-video', 'method': 'POST'}, 'crop_image': {'path': '/api/v1/tools-sync/crop-image', 'method': 'POST'}, 'crop_video': {'path': '/api/v1/tools/crop-video', 'method': 'POST'}, 'detect_voice_activity': {'path': '/api/v1/tools/detect-voice-activity', 'method': 'POST'}, 'drama_recap': {'path': '/api/v1/tools/drama-recap', 'method': 'POST'}, 'drama_recap_vertical': {'path': '/api/v1/tools/drama-recap-vertical', 'method': 'POST'}, 'drama_script': {'path': '/api/v1/tools/drama-script', 'method': 'POST'}, 'enhance_image': {'path': '/api/v1/tools-sync/enhance-image', 'method': 'POST'}, 'enhance_video': {'path': '/api/v1/tools/enhance-video', 'method': 'POST'}, 'enhance_video_fast': {'path': '/api/v1/tools/enhance-video-fast', 'method': 'POST'}, 'enhance_video_generative': {'path': '/api/v1/tools/enhance-video-generative', 'method': 'POST'}, 'erase_image': {'path': '/api/v1/tools-sync/erase-image', 'method': 'POST'}, 'erase_video_subtitle': {'path': '/api/v1/tools/erase-video-subtitle', 'method': 'POST'}, 'erase_video_subtitle_pro': {'path': '/api/v1/tools/erase-video-subtitle-pro', 'method': 'POST'}, 'evaluate_image_quality': {'path': '/api/v1/tools-sync/evaluate-image-quality', 'method': 'POST'}, 'extract_animated_image': {'path': '/api/v1/tools/extract-animated-image', 'method': 'POST'}, 'extract_audio': {'path': '/api/v1/tools/extract-audio', 'method': 'POST'}, 'extract_frames': {'path': '/api/v1/tools/extract-frames', 'method': 'POST'}, 'extract_video_invisible_watermark': {'path': '/api/v1/tools/extract-video-invisible-watermark', 'method': 'POST'}, 'face_blur_image': {'path': '/api/v1/tools-sync/face-blur-image', 'method': 'POST'}, 'face_blur_video': {'path': '/api/v1/tools/face-blur-video', 'method': 'POST'}, 'face_swap_video': {'path': '/api/v1/tools/face-swap-video', 'method': 'POST'}, 'fade_audio': {'path': '/api/v1/tools/fade-audio', 'method': 'POST'}, 'fade_video_audio': {'path': '/api/v1/tools/fade-video-audio', 'method': 'POST'}, 'flip_image': {'path': '/api/v1/tools-sync/flip-image', 'method': 'POST'}, 'flip_video': {'path': '/api/v1/tools/flip-video', 'method': 'POST'}, 'gaussian_blur_image': {'path': '/api/v1/tools-sync/gaussian-blur-image', 'method': 'POST'}, 'generate_highlights_microdrama': {'path': '/api/v1/tools/generate-highlights-microdrama', 'method': 'POST'}, 'generate_highlights_minigame': {'path': '/api/v1/tools/generate-highlights-minigame', 'method': 'POST'}, 'generate_highlights_movie': {'path': '/api/v1/tools/generate-highlights-movie', 'method': 'POST'}, 'image_ocr': {'path': '/api/v1/tools-sync/image-ocr', 'method': 'POST'}, 'image_to_video': {'path': '/api/v1/tools/image-to-video', 'method': 'POST'}, 'invert_image': {'path': '/api/v1/tools-sync/invert-image', 'method': 'POST'}, 'martencode_video': {'path': '/api/v1/tools/martencode-video', 'method': 'POST'}, 'matte_greenscreen_video': {'path': '/api/v1/tools/matte-greenscreen-video', 'method': 'POST'}, 'matte_portrait_video': {'path': '/api/v1/tools/matte-portrait-video', 'method': 'POST'}, 'mix_audio': {'path': '/api/v1/tools/mix-audio', 'method': 'POST'}, 'mosaic_image': {'path': '/api/v1/tools-sync/mosaic-image', 'method': 'POST'}, 'mux_audio_video': {'path': '/api/v1/tools/mux-audio-video', 'method': 'POST'}, 'probe_audio_metadata': {'path': '/api/v1/tools/probe-audio-metadata', 'method': 'POST'}, 'probe_image_metadata': {'path': '/api/v1/tools-sync/probe-image-metadata', 'method': 'POST'}, 'probe_video_metadata': {'path': '/api/v1/tools/probe-video-metadata', 'method': 'POST'}, 'query_task': {'path': '/api/v1/tasks/{task_id}', 'method': 'GET'}, 'remove_image_background': {'path': '/api/v1/tools-sync/remove-image-background', 'method': 'POST'}, 'remux_video': {'path': '/api/v1/tools/remux-video', 'method': 'POST'}, 'resize_image': {'path': '/api/v1/tools-sync/resize-image', 'method': 'POST'}, 'rotate_image': {'path': '/api/v1/tools-sync/rotate-image', 'method': 'POST'}, 'rotate_video': {'path': '/api/v1/tools/rotate-video', 'method': 'POST'}, 'round_corner_image': {'path': '/api/v1/tools-sync/round-corner-image', 'method': 'POST'}, 'segment_scenes': {'path': '/api/v1/tools/segment-scenes', 'method': 'POST'}, 'semantic_segment': {'path': '/api/v1/tools/semantic-segment', 'method': 'POST'}, 'separate_voice': {'path': '/api/v1/tools/separate-voice', 'method': 'POST'}, 'sharpen_image': {'path': '/api/v1/tools-sync/sharpen-image', 'method': 'POST'}, 'slim_image': {'path': '/api/v1/tools-sync/slim-image', 'method': 'POST'}, 'smart_crop_image': {'path': '/api/v1/tools-sync/smart-crop-image', 'method': 'POST'}, 'stitch_video': {'path': '/api/v1/tools/stitch-video', 'method': 'POST'}, 'text_to_scrolling_video': {'path': '/api/v1/tools/text-to-scrolling-video', 'method': 'POST'}, 'transcode_audio': {'path': '/api/v1/tools/transcode-audio', 'method': 'POST'}, 'transcode_video': {'path': '/api/v1/tools/transcode-video', 'method': 'POST'}, 'trim_audio': {'path': '/api/v1/tools/trim-audio', 'method': 'POST'}, 'trim_video': {'path': '/api/v1/tools/trim-video', 'method': 'POST'}, 'video_ocr': {'path': '/api/v1/tools/video-ocr', 'method': 'POST'}, 'video_understand_router': {'path': '/api/v1/tools/video-understand-router', 'method': 'POST'}}

server/mcp_server_mediakit/src/base/base_mcp.py

Lines changed: 0 additions & 206 deletions
This file was deleted.

0 commit comments

Comments
 (0)