docs: consolidate Qoder integration and add Qwen Code - #2934
Conversation
|
Hey there just FYI, we do redirects through |
…Auth links and descriptions
marcel-rbro
left a comment
There was a problem hiding this comment.
Reviewed the prose and the config change. The redirect approach and two authentication claims need fixing; the rest is small. Two points have no line in the diff:
static/img/platform/integrations/qoder-cli.pngandqoder-work.pngare no longer used now that the cards are gone, so they can be deleted.- Neither Qoder nor Qwen is in the AI assistants card grid on the AI integrations index, so the only way in is the "By provider" sentence at the bottom - @daveomri is that on purpose?
| [ | ||
| '@docusaurus/plugin-client-redirects', | ||
| { | ||
| redirects: [ | ||
| { | ||
| to: '/integrations/qoder-plugin', | ||
| from: [ | ||
| '/integrations/qoder-cli', | ||
| '/integrations/qoder-ide', | ||
| '/integrations/qoder-work', | ||
| ], | ||
| }, | ||
| ], | ||
| }, | ||
| ], |
There was a problem hiding this comment.
Redirects in this repo go in nginx.conf, not in the Docusaurus config, and a client-side redirect doesn't return a 301, so the old URLs lose their SEO value. This block is also why Lint app code fails - the oxfmt --check step flags this file.
The matching nginx lines:
rewrite ^/integrations/qoder-cli$ /integrations/qoder-plugin permanent;
rewrite ^/integrations/qoder-ide$ /integrations/qoder-plugin permanent;
rewrite ^/integrations/qoder-work$ /integrations/qoder-plugin permanent;| [ | |
| '@docusaurus/plugin-client-redirects', | |
| { | |
| redirects: [ | |
| { | |
| to: '/integrations/qoder-plugin', | |
| from: [ | |
| '/integrations/qoder-cli', | |
| '/integrations/qoder-ide', | |
| '/integrations/qoder-work', | |
| ], | |
| }, | |
| ], | |
| }, | |
| ], |
|
|
||
| ## Authenticate to Apify | ||
|
|
||
| The plugin bundles the Apify MCP server. Read-only tools like searching Apify Store and fetching Actor details work without signing in, but you need to authenticate to run Actors and access your account data. Each surface triggers the same Apify OAuth flow in your browser. |
There was a problem hiding this comment.
The plugin connects to https://mcp.apify.com/?client=qoder+plugin with no tools parameter, and that endpoint needs a token for every call. So Actor search doesn't work without signing in either - the Qwen page gets this right.
| The plugin bundles the Apify MCP server. Read-only tools like searching Apify Store and fetching Actor details work without signing in, but you need to authenticate to run Actors and access your account data. Each surface triggers the same Apify OAuth flow in your browser. | |
| The plugin bundles the Apify MCP server and connects to its default endpoint, so authenticate before your first prompt - without a token the server rejects every tool call, including Actor search. Each surface triggers the same Apify OAuth flow in your browser. |
| If the browser doesn't open automatically, copy the OAuth URL shown by the surface and open it manually. If sign-in still fails, use an API token from [Apify Console > Settings > Integrations](https://console.apify.com/settings/integrations?utm_source=qoder&utm_medium=integrations): | ||
|
|
||
| ```bash | ||
| export APIFY_TOKEN=<YOUR_API_TOKEN> | ||
| ``` |
There was a problem hiding this comment.
APIFY_TOKEN in your shell doesn't authenticate the MCP server - line 189 of the Qwen page says so, and the plugin config has no token env. The header is the fallback that works.
| If the browser doesn't open automatically, copy the OAuth URL shown by the surface and open it manually. If sign-in still fails, use an API token from [Apify Console > Settings > Integrations](https://console.apify.com/settings/integrations?utm_source=qoder&utm_medium=integrations): | |
| ```bash | |
| export APIFY_TOKEN=<YOUR_API_TOKEN> | |
| ``` | |
| If the browser doesn't open automatically, copy the OAuth URL shown by the surface and open it manually. If sign-in still fails, add an `Authorization` header to the `apify` server with a token from [Apify Console > Settings > Integrations](https://console.apify.com/settings/integrations?utm_source=qoder&utm_medium=integrations): | |
| ```json | |
| "headers": { | |
| "Authorization": "Bearer <APIFY_TOKEN>" | |
| } | |
| ``` |
| title: Qoder integration | ||
| sidebar_label: Qoder | ||
| description: Install the Apify plugin in the Qoder CLI, IDE, Desktop app, and QoderWork to run and build Actors with the Apify MCP server, skills, and a routing agent. | ||
| slug: /integrations/qoder-plugin |
There was a problem hiding this comment.
@daveomri the other hubs use the plain provider slug and give the product name to the product page - /integrations/openai for the hub, /integrations/chatgpt for the product. That would make this /integrations/alibaba for the hub and /integrations/qoder for this page, which also keeps the URL people already have pointing at Qoder content. Was qoder-plugin picked to avoid moving the hub?
| @@ -1 +1 @@ | |||
| label: 'Qoder' | |||
| label: 'Alibaba ecosystem' | |||
There was a problem hiding this comment.
The other categories are 'Claude' and 'OpenAI', so the plain provider name keeps the sidebar consistent.
| label: 'Alibaba ecosystem' | |
| label: 'Alibaba' |
| title: Alibaba ecosystem | ||
| description: Use Apify Actors with Alibaba's Qoder and Qwen tools - install the Apify plugin in the Qoder CLI, IDE, Desktop app, or QoderWork, in Qwen Code, or in QwenWork. | ||
| sidebar_label: Alibaba ecosystem |
There was a problem hiding this comment.
Same as the category label - the OpenAI and Claude hubs use just the provider name.
| title: Alibaba ecosystem | |
| description: Use Apify Actors with Alibaba's Qoder and Qwen tools - install the Apify plugin in the Qoder CLI, IDE, Desktop app, or QoderWork, in Qwen Code, or in QwenWork. | |
| sidebar_label: Alibaba ecosystem | |
| title: Alibaba | |
| description: Use Apify Actors with Alibaba's Qoder and Qwen tools - install the Apify plugin in the Qoder CLI, IDE, Desktop app, or QoderWork, in Qwen Code, or in QwenWork. | |
| sidebar_label: Alibaba |
|
|
||
| > Use Apify to scrape the latest 50 posts from a public Instagram profile and return them as a table. | ||
|
|
||
| ## Bundled skills |
There was a problem hiding this comment.
This table and the three prompts below it are copied word for word from the Qoder page, so they'll drift apart as soon as one changes. Worth moving into a partial in sources/_partials/ and importing it on both pages.
|
|
||
| Inside a session, run `/extensions list` to see installed extensions or `/extensions` for the interactive manager. | ||
|
|
||
| To move to a newer release, download the new ZIP and install it again. The `qwen extensions update` command only covers extensions installed from a local path or a git repository, so it can't update an archive install. |
There was a problem hiding this comment.
@daveomri the install step above uses a local path (qwen extensions install ./apify-qoder-plugin-<version>.zip), so this reads like the install method and the unsupported update method are the same thing. Is the difference a ZIP file versus an unpacked folder?
|
|
||
| If the sign-in page doesn't open or the server stays disconnected: | ||
|
|
||
| - **Qwen Code:** copy the authorization URL from the terminal and open it manually. If sign-in still fails, add an `Authorization: Bearer <APIFY_TOKEN>` header to the `apify` server in `~/.qwen/settings.json` under `mcpServers` - see [Bearer token authentication](/integrations/mcp) for the shape. |
There was a problem hiding this comment.
The MCP page has no "Bearer token authentication" heading, so this link drops the reader at the top. The tab is in the client configuration section.
| - **Qwen Code:** copy the authorization URL from the terminal and open it manually. If sign-in still fails, add an `Authorization: Bearer <APIFY_TOKEN>` header to the `apify` server in `~/.qwen/settings.json` under `mcpServers` - see [Bearer token authentication](/integrations/mcp) for the shape. | |
| - **Qwen Code:** copy the authorization URL from the terminal and open it manually. If sign-in still fails, add an `Authorization: Bearer <APIFY_TOKEN>` header to the `apify` server in `~/.qwen/settings.json` under `mcpServers` - see [Client configuration](/integrations/mcp#client-configuration) for the shape. |
|
|
||
| ## Limitations | ||
|
|
||
| - In Qwen Code, the plugin's role guide ships as `qoder.md`. Qwen Code auto-loads a root `system-prompt.md` as context, so this file is not injected automatically. The `apify` agent and skills still work; invoke the agent to get the routing behavior. |
There was a problem hiding this comment.
"this file" reads as system-prompt.md, the file named right before it.
| - In Qwen Code, the plugin's role guide ships as `qoder.md`. Qwen Code auto-loads a root `system-prompt.md` as context, so this file is not injected automatically. The `apify` agent and skills still work; invoke the agent to get the routing behavior. | |
| - In Qwen Code, the plugin's role guide ships as `qoder.md`. Qwen Code auto-loads a root `system-prompt.md` as context, so `qoder.md` is not injected automatically. The `apify` agent and skills still work; invoke the agent to get the routing behavior. |
Consolidates the Qoder CLI, IDE, Desktop, and QoderWork pages into one Qoder integration page (with QoderWake and the JetBrains plugin covered as MCP-server surfaces), and adds a Qwen page for Qwen Code, which reuses the same Apify plugin, and QwenWork, which connects the Apify MCP server and skills directly; the Qoder logo is refreshed and the old
qoder-cli/qoder-ide/qoder-workslugs redirect to the new page.A page per Qoder product was redundant since they share the same setup steps, and Alibaba's new Qwen tools can reuse the Qoder plugin.