feat(connections): open a remote MCP server the way a Composio provider opens (#821) - #829
1 finding
The PR does what the title says — opens a remote MCP server into the same ProviderDetail panel a Composio provider uses, via a ConnectionSubject discriminated union, read-only, with tests and docs. The description is thorough on the four claims it lists and the design decisions. One rendered section is missing from the description: the reachability check (#568) that flags an enabled server no agent's grants cover, which has its own UI, test, and destructive styling in the diff. Otherwise the description matches the diff accurately. Code retrieval was unavailable (model: openrouter embeddings returned 404 Not Found: {"error":{"message":"No allowed providers are available for the selected model. Providers serving openai/text-embedding-3-small: openai, azure, but your account's allowed-providers setting permits only: deepinfra, streamlake, digitalocean. To change your allowed providers, visit: https://openrouter.ai/settings/privacy.","code":404,"metadata":{"available_providers":["openai","azure"],"requested_pro), so this review saw the diff alone.
| Finding | Where | |
|---|---|---|
| Reachability section (#568) in MCP panel not mentioned in PR description | (pull request description) |
 Reachability section (#568) in MCP panel not mentioned in PR description
[RULE] Include updated examples or docs when public APIs, architecture, or expected usage changes.
The PR body lists four claims the panel makes (a table with rows: Connected/as what, Usage, When connected, What a disconnect reaches). The diff renders a fifth section — a reachability check for enabled servers — that the description never mentions. It has its own destructive-styled UI, its own data-testid, and its own render test referencing #568, so it is not a trivial omission.
The unmentioned section, in McpBody:
{standing.live && server.reachableBy !== undefined && (
<p
className={
server.reachableBy.length === 0
? "flex items-start gap-2 rounded-md border border-destructive/30 bg-destructive/10 px-2 py-1 text-xs font-medium text-destructive"
: "text-xs text-muted-foreground"
}
data-testid="mcp-detail-reachability"
>
{server.reachableBy.length === 0 ? (
<>
<AlertTriangle className="mt-0.5 size-3.5 shrink-0" />
<span>
No agent can reach this server — no teammate's tool grants cover{" "}
<code className="font-mono">mcp:{server.name}</code>. Whatever usage says below
happened before that was true.
</span>
</>
) : (
<span>
Reachable by: {" "}
<span className="font-medium text-foreground">{server.reachableBy.join(", ")}</span>
</span>
)}
</p>
)}And its test, which is one of the 11 new render tests:
it("flags an enabled server no agent's grants cover", async () => {
// #568, restated where the panel can afford the sentence the row could not:
// usage above it is history, not evidence that it is reachable now.
await openMcp(mcpServer({ reachableBy: [] }));
expect(text()).toContain("No agent can reach this server");
await openMcp(mcpServer({ reachableBy: ["ceo", "engineer"] }));
expect(text()).toContain("ceo, engineer");
});