Skip to main content
Connect AI Tools

OpenCode

Terminal AI coding assistant

Connect it to QwenCloud via Token Plan (Individual), Token Plan (Team Edition), or pay-as-you-go billing.
When using qwen4-max-preview, the default output limit is 32000; to allow longer output, set OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX.

Install OpenCode

  1. Install or update Node.js (v18.0 or later).
  2. Run the following command in the terminal to install OpenCode.
npm install -g opencode-ai
Run the following command to verify the installation. The installation is successful if a version number is displayed.
opencode -v

Quick Start

1

Connect the provider

Run opencode, enter /connect, select the provider for your billing plan, and enter the API key:
  • Token Plan
  • Pay-as-you-go
Select Alibaba Token Plan (China) and enter the Token Plan API key for your edition:
2

Select a model

Enter /models and select the model you want.
3

Verify

Run the following command to verify:
opencode run "Hello"

Configure access credentials

In addition to the options above, you can also connect using a configuration file.
1

Open or create the configuration file

  • macOS / Linux: ~/.config/opencode/opencode.json
  • Windows: C:\Users\<Your-Username>\.config\opencode\opencode.json
2

Write the configuration

Replace YOUR_API_KEY with the API key for your plan.
  • Token Plan Individual
  • Token Plan Team Edition
  • Pay-as-you-go
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "qwencloud-token-plan-personal": {
      "npm": "@ai-sdk/anthropic",
      "name": "QwenCloud",
      "options": {
        "baseURL": "https://token-plan.maas.qwencloudapi.com/apps/anthropic/v1",
        "apiKey": "YOUR_API_KEY"
      },
      "models": {
        "auto": {
          "name": "Auto",
          "modalities": {
            "input": ["text"],
            "output": ["text"]
          },
          "limit": {
            "context": 1000000,
            "output": 393216
          }
        },
        "qwen4-max-preview": {
          "name": "Qwen4 Max Preview",
          "modalities": {
            "input": [
              "text",
              "image"
            ],
            "output": [
              "text"
            ]
          },
          "limit": {
            "context": 1000000,
            "output": 131072
          }
        },
        "qwen3.8-max": {
          "name": "Qwen3.8 Max",
          "modalities": {
            "input": ["text", "image"],
            "output": ["text"]
          },
          "limit": {
            "context": 1000000,
            "output": 131072
          }
        },
        "qwen3.8-flash": {
          "name": "Qwen3.8 Flash",
          "modalities": {
            "input": ["text", "image"],
            "output": ["text"]
          },
          "limit": {
            "context": 1000000,
            "output": 131072
          }
        },
        "qwen3.7-max": {
          "name": "Qwen3.7 Max",
          "modalities": {
            "input": ["text"],
            "output": ["text"]
          },
          "limit": {
            "context": 1000000,
            "output": 65536
          }
        },
        "qwen3.7-plus": {
          "name": "Qwen3.7 Plus",
          "modalities": {
            "input": ["text", "image"],
            "output": ["text"]
          },
          "limit": {
            "context": 1000000,
            "output": 65536
          }
        },
        "qwen3.6-flash": {
          "name": "Qwen3.6 Flash",
          "modalities": {
            "input": ["text", "image"],
            "output": ["text"]
          },
          "limit": {
            "context": 1000000,
            "output": 65536
          }
        },
        "deepseek-v4.1-flash": {
          "name": "DeepSeek V4.1 Flash",
          "modalities": {
            "input": ["text", "image"],
            "output": ["text"]
          },
          "limit": {
            "context": 1000000,
            "output": 65536
          }
        },
        "deepseek-v4.1-flash-1017": {
          "name": "DeepSeek V4.1 Flash 1017",
          "modalities": {
            "input": ["text", "image"],
            "output": ["text"]
          },
          "limit": {
            "context": 1000000,
            "output": 65536
          }
        },
        "deepseek-v4-pro": {
          "name": "DeepSeek V4 Pro",
          "modalities": {
            "input": ["text"],
            "output": ["text"]
          },
          "limit": {
            "context": 1000000,
            "output": 65536
          }
        },
        "deepseek-v4-pro-0813": {
          "name": "DeepSeek V4 Pro 0813",
          "modalities": {
            "input": ["text"],
            "output": ["text"]
          },
          "limit": {
            "context": 1000000,
            "output": 65536
          }
        },
        "deepseek-v4-flash-0731": {
          "name": "DeepSeek V4 Flash 0731",
          "modalities": {
            "input": ["text"],
            "output": ["text"]
          },
          "limit": {
            "context": 1000000,
            "output": 65536
          }
        },
        "glm-5.3": {
          "name": "GLM-5.3",
          "modalities": {
            "input": ["text"],
            "output": ["text"]
          },
          "limit": {
            "context": 202752,
            "output": 16384
          }
        },
        "glm-5.2": {
          "name": "GLM-5.2",
          "modalities": {
            "input": ["text"],
            "output": ["text"]
          },
          "limit": {
            "context": 202752,
            "output": 16384
          }
        }
      }
    }
  }
}

Verify configuration

After saving the configuration, restart OpenCode, type /models, search for QwenCloud, and select the model you want to use.

FAQ

Error codes

If you encounter errors during configuration, refer to the FAQ documentation for your billing plan:

The model I need is not in the list

Upgrade OpenCode to the latest version, then check /models again. If the model is still missing, define a custom provider in opencode.json and add the model.

Requests return 401 Unauthorized

The API key does not match the selected provider, or the key belongs to another billing plan. Run /connect again, select the provider for your plan, and enter the correct key.