Repository navigation
feat(mcp): add EvoLink media generation server - #2456
Conversation
Adds EvoLink's hosted MCP server (https://mcp.evolink.ai/mcp) as a built-in HTTP entry that ships disabled. It signs in with OAuth, so the entry has no custom headers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to
|
zerob13
left a comment
There was a problem hiding this comment.
Adds EvoLink as a disabled built-in HTTP MCP preset. The shape matches the existing presets, the upgrade path works, and the settings suite passes locally. One change needed before merge.
Remove the tracking parameters from the docs link
The description is rendered in the MCP settings card, so this URL is user-visible:
https://evolink.ai/mcp?utm_source=deepchat&utm_medium=referral&utm_campaign=mcp_remote&utm_content=directory_listing
No other built-in entry ships attribution parameters in its description; they link to plain documentation URLs (https://docs.keenable.ai, https://serply.io/docs, the SkyAccess GitHub repo). A referral-tagged URL in product copy is tracking, not documentation. Please use https://evolink.ai/mcp.
Merge order: #2455 is a bug report, not a fix
The PR text says this depends on #2455. #2455 is an open issue about OAuth code exchange failing when the issuer has no trailing slash, not a pull request, so nothing will land to unblock this automatically. The entry is still safe to merge on its own: it ships disabled and existing users only gain an unchecked list item. But sign-in cannot complete until that bug is fixed. Wait for the fix PR, or record the release dependency so this preset is not announced as working before it is.
The rest is fine
- Scope: one preset plus one upgrade test. No new provider class, no abstraction, no dependency, no edits to existing entries.
- Defaults: appended after
keenable-searchand not inDEFAULT_ENABLED_SERVER_NAMES, so it ships disabled. The new test asserts exactly that for an existing user with an empty store. - No
customHeadersis correct for this server.isRemoteOAuthCapabletreats an HTTP server without anAuthorizationheader as interactive OAuth, and the endpoint answersinitializewith 401 plus valid protected-resource metadata. - Description: billing and the free operations are stated before the user enables it. Good.
- Tests: one test following the same pattern as the SkyAccess, Cohesivity and Keenable cases. Not excessive.
- No breaking or destructive change: +28/−0 across two files.
Verification at head 3a5c2054: isolated worktree; vitest run test/main/mcp/settings.test.ts 15/15 passed; oxfmt --check and oxlint clean on both changed files; POST initialize to https://mcp.evolink.ai/mcp returned 401 and /.well-known/oauth-protected-resource returned 200. Node typecheck did not finish cleanly in this environment because the workspace package acp-extension-core is missing, which is unrelated to these files, so I am not counting it as verification.
Review details
- Head reviewed:
3a5c2054889fec348f57ed106ba0436c5c27df90 - Base:
devatb10443ab7ed7e55c2cd18c8919a6a124d2b978c3 - Diff:
src/main/mcp/settings.ts+11,test/main/mcp/settings.test.ts+17 - CI: PR Check and Package Check were waiting for first-time-contributor approval; they are running now.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks for the review. I removed the tracking parameters: the description now links to On merge order, either way works for us. The entry ships disabled, so it can go in before the fix as long as it isn't announced as working until #2455 is fixed. I've updated the PR description to say that. We're happy to test a fix for #2455 against our server whenever it's ready. |
zerob13
left a comment
There was a problem hiding this comment.
The requested change is in. Approving; merge once CI passes.
What changed
The docs link in the MCP settings card now points to https://evolink.ai/mcp. The tracking parameters are gone. That is the only code change since the last review (5141a96).
What still applies
- The preset ships disabled and is appended after
keenable-search, so the upgrade only adds an unchecked entry. No existing behavior moves. - Browser sign-in for this server still depends on the OAuth issuer fix in #2455. The PR description now says that plainly, which is the right way to ship a preset that cannot be used until the fix lands. Do not present it as working before then.
- I approved the two first-time-contributor workflow runs at this head; PR Check and Package Check are queued.
Verification
pnpm exec vitest run --config vitest.config.ts test/main/mcp/settings.test.ts→ 15/15 passed.oxfmt --checkandoxlintclean onsrc/main/mcp/settings.ts.- Full PR diff vs
dev: +28/−0 acrosssrc/main/mcp/settings.tsandtest/main/mcp/settings.test.ts. One preset plus one upgrade test; no new abstraction, dependency, or edits to other entries.
Review details
- Head reviewed:
5141a96cccb3f665fb90655afb54f3fb1b065b26 - Previous review:
3a5c2054889fec348f57ed106ba0436c5c27df90(changes requested for the tracking URL) - Delta: one line in
src/main/mcp/settings.ts - Review scope: isolated worktree at the PR head; the main working tree was not touched.
Sign-in needs the fix for #2455. With current DeepChat, OAuth sign-in to this server cannot finish: the code exchange fails because of the issuer comparison described there. The entry ships disabled, so merging it before that fix is fine with us; please don't announce it as working until #2455 is fixed.
Disclosure: I work at EvoLink (https://evolink.ai), the provider added by this PR. It comes from the EvoLink company GitHub account.
Summary
Adds
evolinktoDEFAULT_MCP_SERVERSas a built-in HTTP MCP server that ships disabled.EvoLink is a media generation API with 150+ image, video, music and speech models. The hosted endpoint
https://mcp.evolink.ai/mcp(streamable HTTP) has 16 tools: model search, published prices and cost quotes, image/video/audio generation, task status, balance, and uploads for reference media. Sign-in is OAuth 2.1 with dynamic client registration and PKCE (S256), with no API key, so the entry has nocustomHeadersand DeepChat's interactive OAuth handles sign-in through the Authenticate button. It would be the first built-in entry that signs in with OAuth.The entry follows the
skyaccess-empty-legsandcohesivityshape (type: 'http'plusbaseUrl). It is appended afterkeenable-searchand is not inDEFAULT_ENABLED_SERVER_NAMES, so it is listed but off. No existing entry, default or ordering changes.Costs: model search, prices, quotes, task status and balance checks are free.
generate_image,generate_videoandgenerate_audiocharge the signed-in user's EvoLink balance; the server's instructions ask the assistant to show a quote and wait for the user's approval before each paid task.What is sent to EvoLink once a user enables it and signs in: the prompts and parameters of the tasks the model requests, reference media URLs or uploaded files, and task IDs for status checks.
Two files, 28 added lines, no dependencies.
Testing
The new case in
test/main/mcp/settings.test.tsmirrors the Keenable case: an existing user with an emptymcpServersstore picks up the entry on upgrade withenabled: falseand no custom headers, soisRemoteOAuthCapabletreats it as an interactive OAuth server.Live check through the app's own code path: a throwaway Vitest file (not committed) ran
McpOAuthManager.startAuthagainst the real endpoint withshell.openExternalstubbed, then requested the authorization URL without following redirects and sent a callback with a fake code to DeepChat's loopback server:#2455 also describes a second problem that appears after that fix: retrying after an unfinished sign-in reuses the client with a new random callback path. Logging out of the server and authenticating again works around it.
To try it once #2455 is fixed: enable the server, click Authenticate, sign in or create an EvoLink account, then call
check_balanceorsearch_models; both are free.No renderer strings were added, so
pnpm run i18nis not needed.🤖 Generated with Claude Code
Summary by CodeRabbit
https://mcp.evolink.ai/mcp, with browser-based OAuth sign-in and no API key required.