github / github/copilot-sdk

MCP discovery exposes no launch config or source path — blocks viewing/editing discovered servers

Open
#1,518 0 comments 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
Java
Stars
10.5k
Forks
1.5k
Avg merge
1d 14h
Merged PRs (30d)
129

Description

## Summary

When a session discovers MCP servers (`mcp.discover` / the session `McpServerList`), the returned shapes expose only **identity and status** — not the **resolved launch config** (command/args/url/env/headers) nor the **origin file path** of the declaration. This makes it impossible for an SDK consumer to (a) show *where* a discovered server came from, or (b) offer **edit / override** of a discovered workspace/plugin server, because the consumer never receives the config it would need to display or round-trip.

## Current shapes (from `dist/generated/rpc.d.ts` / `session-events.d.ts`, beta.9)

```ts
// DiscoveredMcpServer (rpc.d.ts ~2657)
{ name: string; type?: string; source: McpServerSource; enabled: boolean }

// McpServer (rpc.d.ts ~4148)
{ name: string; status: string; source?: McpServerSource; error?: string }

// McpServerSource (session-events.d.ts)
type McpServerSource = "user" | "workspace" | "plugin" | "builtin";
```

None of these carry:

- the resolved **launch configuration** — `command` / `args` / `env` for stdio, or `url` / `headers` / `type` for http/sse;
- the **origin file path** (e.g. which `.mcp.json` / `.github/mcp.json` the entry came from), only a coarse `source` enum.

`mcp.config.enable/disable` is enough to toggle a discovered server (and persists — thank you), but **viewing and editing** a discovered server's definition is not possible from the SDK surface.

## Ask

Extend the discovery surface so consumers can render and edit discovered servers. Either is fine:

1. Add the resolved config + origin to `DiscoveredMcpServer` (and/or `McpServer`), e.g.

```ts
{
name: string;
source: McpServerSource;
enabled: boolean;
// new:
config?: McpServerConfig; // command/args/env | url/headers/type
sourcePath?: string; // absolute path of the declaring file
}
```

2. Or add a dedicated rpc, e.g. `mcp.config.get({ name })` → resolved config + origin path, so consumers can fetch on demand.

Either unlocks: showing the source file in a server detail view, and an **edit/override** affordance for discovered workspace/plugin servers (today only `user`-source servers we wrote ourselves can be edited, because we hold their config; discovered ones are opaque).

## Context / why

We're a desktop UI (Dafman) over the Copilot agent. Users expect to see where a discovered MCP server is defined and to tweak its args/env without hand-editing JSON files they may not know the location of. Toggle persistence already works; this is the remaining gap for a full MCP management UI.

(Filed from downstream tracking issue AsafMah/dafman#9. Happy to provide a repro or test against a beta.)

Contributor guide

Open the contributing guide

Research direction

Read dist/generated/rpc.d.ts and session-events.d.ts, then trace the mcp.discover and session McpServerList shapes alongside mcp.config.enable/disable. Determine whether the discovery response or a new mcp.config.get RPC best exposes resolved stdio or HTTP/SSE configuration and the declaring file path; done means consumers can view the origin and edit or override discovered servers.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
api
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.