{"slug": "how-to-connect-seedance-mcp-to-opencode-for-terminal-based-video-workflows", "title": "How to Connect Seedance MCP to OpenCode for Terminal-Based Video Workflows", "summary": "A developer-focused guide details how to connect a remote Seedance MCP server to the OpenCode terminal coding agent, exposing two tools—seedance_generate_video for text-to-video and seedance_generate_video_from_image for image-to-video—so short clips can be generated from natural-language prompts without leaving the editor. The setup uses a remote MCP endpoint with Bearer token authentication configured in opencode.json, requiring oauth set to false and the API key supplied via an exported environment variable rather than committed to the file.", "body_md": "When a video task starts in a terminal, the awkward part is often context switching: leave the editor, open a separate tool, upload an image, copy the result back, and repeat. This guide shows how to connect a remote Seedance MCP server to OpenCode so a terminal session can request short videos through natural-language instructions.\n\nThe integration exposes two documented tools:\n\n`seedance_generate_video` for text-to-video generation`seedance_generate_video_from_image` for image-to-video generation\nThat covers vertical short clips, product-demo animations, technical opening clips, and other cases where the first draft starts as either a description or an existing image. OpenCode connects to the remote MCP endpoint below; no local MCP server is required.\n\n```\nhttps://seedance.mcp.acedata.cloud/mcp\n```\n\nAuthentication uses a Bearer token in the `Authorization` header. Keep the real token outside the configuration file and let OpenCode resolve it from an exported environment variable.\n\nOpenCode reads MCP definitions from `opencode.json`. Use `~/.config/opencode/opencode.json` for a global setup, or `opencode.json` in a project root for a project-specific setup. The project-level file overrides the global one, so it is a useful place to test the integration first.\n\n```\n{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"mcp\": {\n    \"seedance\": {\n      \"type\": \"remote\",\n      \"url\": \"https://seedance.mcp.acedata.cloud/mcp\",\n      \"enabled\": true,\n      \"oauth\": false,\n      \"headers\": {\n        \"Authorization\": \"Bearer {env:ACEDATACLOUD_API_KEY}\"\n      }\n    }\n  }\n}\n```\n\n`type` declares a remote MCP connection, `url` selects the Seedance server, and `enabled` controls whether OpenCode loads it. The `oauth` field must explicitly be `false`: this server expects Bearer authentication, not an OAuth challenge. The `headers.Authorization` value supplies the token without putting the secret in JSON.\n\nExport the token before starting OpenCode:\n\n```\nexport ACEDATACLOUD_API_KEY=\"replace with your real token\"\n```\n\nDo not commit the real value to Git. If you keep it in a `.env` file, exporting matters. One documented way to load exported variables into the OpenCode process is:\n\n```\nset -a && source .env && set +a\n```\n\nOtherwise the placeholder may resolve to an empty value. The configuration can look correct while the request still carries an incomplete header.\n\nStart with:\n\n```\nopencode mcp list\nopencode mcp debug seedance\n```\n\nA successful setup should show the Seedance connection as `connected`. If you see HTTP 401 or an SSE non-200 error, check these items in order:\n\n`ACEDATACLOUD_API_KEY` is exported in the shell that launches OpenCode.`Bearer` prefix.`oauth` is present and set to `false`.\nThis separates an environment-variable problem from an authentication-mode problem and avoids putting a real secret into debug output.\n\nAfter the handshake succeeds, stay in the OpenCode session and describe the output. For example:\n\n```\nGenerate a vertical short video: a girl turns under a cherry blossom tree, slow motion, beautiful light and shadow\n```\n\nSpecify orientation, subject, movement, and lighting rather than asking for a vague “cool video.” OpenCode can then use `seedance_generate_video` through MCP while remaining the interface for the request.\n\nA developer-focused smoke test is:\n\n```\nGenerate a 3-second video intro: a glowing code symbol </> transitions from blurry to clear, with particle effects in the background, in a tech blue tone\n```\n\nShort prompts are easier to debug before adding references or several creative constraints.\n\nWhen you already have a still image, use the image-to-video capability instead of describing every visual detail again:\n\n```\nUse this image as a cover, generate a video with the camera slowly zooming in\n```\n\nThe relevant tool is `seedance_generate_video_from_image`. This is useful for turning a product screenshot, illustration, or existing cover into a motion asset while preserving the starting composition.\n\nIf the server does not connect, avoid changing several variables at once. Confirm the URL is exactly `https://seedance.mcp.acedata.cloud/mcp`, verify that the token is available to the OpenCode process, and run `opencode mcp debug seedance` again. If the connection is healthy but a generation request is not selected, use a model that supports native tool calls, since the available model and tool schema can change over time.\n\nThe complete configuration and current tool-list request are in the [OpenCode + Seedance MCP guide](https://platform.acedata.cloud/documents/opencode-mcp-seedance). The practical takeaway is simple: keep credentials in the environment, keep `oauth: false` explicit, verify the handshake first, and only then build more elaborate terminal workflows.", "url": "https://wpnews.pro/news/how-to-connect-seedance-mcp-to-opencode-for-terminal-based-video-workflows", "canonical_source": "https://dev.to/germey/how-to-connect-seedance-mcp-to-opencode-for-terminal-based-video-workflows-blk", "published_at": "2026-10-20 01:07:01+00:00", "updated_at": "2026-10-20 01:16:46.547996+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "ai-tools", "generative-ai", "developer-tools"], "entities": ["Seedance", "OpenCode", "AceData Cloud"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/how-to-connect-seedance-mcp-to-opencode-for-terminal-based-video-workflows", "markdown": "https://wpnews.pro/news/how-to-connect-seedance-mcp-to-opencode-for-terminal-based-video-workflows.md", "text": "https://wpnews.pro/news/how-to-connect-seedance-mcp-to-opencode-for-terminal-based-video-workflows.txt", "jsonld": "https://wpnews.pro/news/how-to-connect-seedance-mcp-to-opencode-for-terminal-based-video-workflows.jsonld"}}