Gives Claude access to 45+ image models, 70+ video models, and 20+ audio tools through the kie.ai API. Every model includes embedded research from Averiguare with prompt techniques, cost analysis, and competitor comparisons. You can filter models by capability ("lip sync", "cheapest video", "text rendering") and the server searches across tags and research fields. Handles generation across OpenAI, Google Veo, Flux, Sora, Kling, Alibaba's HappyHorse and Wan, Suno, ElevenLabs, and dozens more. Includes utilities for extending videos, upscaling to 4K, vocal separation, and TTS. Tracks pricing in credits and USD so you can optimize for cost. Runs as stdio for Claude Desktop or HTTP for remote deployments.
A comprehensive Model Context Protocol server for the kie.ai generation API. Gives Claude (and any MCP client) access to 47+ image models, 80+ video models, and 20+ audio tools with deep model intelligence built in.
Most MCPs are thin API wrappers. This one is different:
research field with verdicts, prompt techniques, weaknesses, cost-efficiency analysis, and competitor comparisons. Researched by Averiguare, our model intelligence agent.list_models filter="lip sync" or filter="architecture" or filter="cheapest video" — searches across capability tags, descriptions, AND research fields.Just ask Claude things like:
git clone https://github.com/YOUR_USERNAME/kie-mcp.git
cd kie-mcp
npm install
Add to your Claude config (~/.claude.json for Claude Code, or your MCP client's equivalent):
{
"mcpServers": {
"kie-art": {
"command": "node",
"args": ["/absolute/path/to/kie-mcp/server.mjs"],
"env": {
"KIE_API_KEY": "your-kie-ai-api-key",
"KIE_PROJECT_ROOT": "/optional/path/for/outputs"
}
}
}
}
Or use the Claude Code CLI:
claude mcp add -s user kie-art /usr/bin/env -- KIE_API_KEY=your-key node /path/to/server.mjs
KIE_API_KEY=your-key node server.mjs --http --port=3100
Then expose via ngrok / Cloudflare Tunnel / VPS deployment:
ngrok http 3100
Configure your MCP client to use the resulting URL:
{
"mcpServers": {
"kie-art": {
"type": "http",
"url": "https://your-tunnel.ngrok-free.dev/mcp"
}
}
}
| Variable | Required | Purpose |
|---|---|---|
KIE_API_KEY | yes | Your kie.ai API key |
KIE_PROJECT_ROOT | no | Server-wide default for where generated files are saved (default: server cwd; files go to $KIE_PROJECT_ROOT/kie/assets/raw/). Per-call download_dir (absolute path) on any file-writing tool overrides this |
KIE_MCP_PORT | no | Port for HTTP mode (default: 3100) |
KIE_CALLBACK_URL | no | Callback URL sent with Suno generation requests (kie.ai requires the field; results are fetched by polling regardless). Defaults to an inert placeholder — set this only if you want to receive the callbacks yourself |
KIE_MAX_CONCURRENT | no | Max simultaneous task-creation calls (default 4). Excess parallel generations queue inside the server instead of hitting kie.ai's rate limits — parallel tool calls are safe |
KIE_POLL_BUDGET_IMAGE / _VIDEO / _AUDIO / _SPEECH | no | Blocking-mode polling budget per tool category, in seconds (defaults: 600 / 900 / 300 / 300). Per-call max_wait_seconds takes precedence. For long generations prefer wait: false (async mode): the tool returns the task_id immediately; poll with check_task, fetch with download_result |
generate_image, generate_video, generate_music, generate_sfx,
generate_tts, generate_dialogue, generate_sounds, generate_lyrics,
generate_persona, generate_mashup, generate_cover_art,
generate_midi, create_music_video,
prepare_voice_clone, create_voice_clone, regenerate_voice_clone,
create_omni_voice, create_omni_character,
extend_music, cover_audio, upload_extend_audio,
add_instrumental, add_vocals, replace_section,
convert_to_wav, separate_vocals, boost_style,
get_timestamped_lyrics, audio_isolation, speech_to_text,
list_models, check_task, list_tasks, check_credits,
download_result, list_raw_assets, upload_file,
veo_extend, veo_upscale_1080p, veo_upscale_4k, runway_extend
Try these queries in any MCP client:
list_models filter="reasoning" # GPT-4o, Nano Banana, GPT Image 2
list_models filter="lip-sync" # OmniHuman 1.5, Volcengine, Kling Avatar, HappyHorse 1.1
list_models filter="multi-shot" # Kling 3.0/Turbo
list_models filter="cheapest video" # Grok Imagine 1.5, Wan Flash
list_models filter="alibaba" # HappyHorse 1.0/1.1 family
list_models filter="best visual quality" # Veo Quality, Seedance 2.0
list_models filter="text rendering" # Ideogram v3, GPT Image 2
list_models filter="character" # Ideogram Character, Kling AI Avatar
server.mjs # Transport, helpers, tool handlers (~2700 lines)
├── createMcpServer() # Factory for stdio + HTTP modes
├── Tool handlers # generate_*, list_*, etc.
└── helpers # polling, recovery, pricing, validation, download
data/ # Pure data, imported (and re-exported) by server.mjs
├── registry-image.mjs # MODEL_REGISTRY — image models (47+)
├── registry-video.mjs # VIDEO_MODEL_REGISTRY — video models (80+)
├── registry-audio.mjs # AUDIO_TOOLS_REGISTRY — audio tool metadata
├── pricing.mjs # PRICING, PRICING_ESTIMATED, PROMPT_CAPS
└── voices.mjs # ELEVENLABS_VOICES catalog
The registries and pricing live in data/*.mjs so model-catalog changes are reviewable diffs instead of edits buried in a 5000-line file; server.mjs imports and re-exports them (tests and downstream keep importing from server.mjs).
Each model entry has:
name, description, capabilities (tags), pricing (credits)aspectRatios, options (with types and defaults)buildBody / buildInput (request builders)research (Averiguare verdicts, prompt techniques, weaknesses, comparisons, sources)npm run check # node --check server.mjs (syntax)
npm test # offline unit tests for the pure helpers (test/*.test.mjs)
npm run smoke # live end-to-end over MCP stdio — needs KIE_API_KEY
# (spends ~0 credits; uses the free subject-detection model)
server.mjs guards its side effects behind a main-module check, so it can be imported by tests (test/unit.test.mjs) to exercise the pure helpers without starting a server. test/harness.mjs is a reusable stdio JSON-RPC client for driving the real server in smoke/integration checks. CI (.github/workflows/ci.yml) runs the syntax check + unit tests on Node 20 and 22 for every push and PR.
kie.ai changes things without notice — advertised prices, model availability, even API shapes. .github/workflows/drift-watch.yml runs scripts/drift-watch.mjs weekly (and on demand) to scan for it: paused/removed slugs, pricing that no longer matches the PRICING table, and new models in kie's catalog. Findings land in a single rolling GitHub issue. Add a KIE_API_KEY repo secret to enable the per-slug liveness probes (0 credits — empty-input validation errors); the pricing and new-model scans need no secret. Run locally with node scripts/drift-watch.mjs.
Releases are automated by .github/workflows/release.yml. To cut a release:
package.json, server.json (both the top-level version and packages[0].version), and server.mjs (SERVER_INFO + the /health handler), and add a ## [X.Y.Z] section to CHANGELOG.md. Merge to main.git tag vX.Y.Z && git push origin vX.Y.Z
The workflow verifies the tag matches every in-repo version string, publishes to npm with provenance (NPM_TOKEN repo secret), and creates the GitHub Release using the matching CHANGELOG section as the notes. A tag whose version doesn't match the code fails fast without publishing. workflow_dispatch is an emergency manual publish of the current package.json version.
MIT
KIE_API_KEY*secretYour kie.ai API key from https://kie.ai/api-key
KIE_PROJECT_ROOTDirectory where generated files are saved (under kie/assets/raw/). Defaults to cwd.
io.github.socialapishub/social-media-api
io.github.xpaysh/social-media
com.thenextgennexus/youtube-media-mcp-server
io.github.ludmila-omlopes/youtube-video-analyzer
csoai-org/social-media-ai-mcp
com.ezbizservices/social-media