GH-600 · Domain 2: Implement tool use and environment interaction · 22% of the exam
Task 2.2: Configure MCP servers
Adding MCP servers to agents and repositories, setting up the remote GitHub MCP server, and controlling which servers may run through registries and allowlists.
Study it
MCP servers for repositories and custom agents, and the remote GitHub MCP server
Lesson coming
MCP registries, allowlists and enterprise-managed settings
Lesson coming
Sample questions
Try each one before opening the answer. Every option is explained, with the GitHub documentation page that proves it.
Question 1 · choose 1
A repository administrator adds a Sentry MCP server to the repository's MCP configuration with "SENTRY_ACCESS_TOKEN": "$SENTRY_TOKEN" in env, and stores SENTRY_TOKEN as an Agents secret. The server starts without credentials. What fixes it?
AMove SENTRY_TOKEN to an organization-level Agents secret, since repository-level ones never reach MCP servers
BRename the secret with the COPILOT_MCP_ prefix and reference that name
CWrite ${{ secrets.SENTRY_TOKEN }} instead of $SENTRY_TOKEN in the repository JSON
DPaste the token as a literal value in env, since the configuration is only visible to administrators
Show the answer and why
AMove SENTRY_TOKEN to an organization-level Agents secret, since repository-level ones never reach MCP servers
Incorrect
Repository-level Agents secrets can reach MCP servers too; what matters is that the name carries the COPILOT_MCP_ prefix.
BRename the secret with the COPILOT_MCP_ prefix and reference that name
Correct
Only Agents secrets and variables whose names start with COPILOT_MCP_ are available to the MCP configuration.
CWrite ${{ secrets.SENTRY_TOKEN }} instead of $SENTRY_TOKEN in the repository JSON
Incorrect
That syntax is an extra pattern for custom agent YAML, and the name would still need the COPILOT_MCP_ prefix.
DPaste the token as a literal value in env, since the configuration is only visible to administrators
Incorrect
Literal values work, but credentials belong in Agents secrets with the prefix rather than in the configuration.
In a repository MCP configuration, env and headers values can be literals or references such as $COPILOT_MCP_API_KEY, ${COPILOT_MCP_API_KEY} or ${COPILOT_MCP_API_KEY:-default}. Referenced names must start with COPILOT_MCP_, and only Agents secrets and variables with that prefix are available to the MCP configuration, whether they are set for the repository or the organization.
An enterprise self-hosts an MCP registry and enters its URL in the MCP policy. Developers' IDEs fail to load the server list, although curl from a terminal returns the servers. The registry implements GET /v0.1/servers and the versions endpoints. What is most likely missing?
AAn older /v0/servers endpoint, which IDEs still request first
BA copilot-setup-steps.yml file that starts the registry inside every agent session
CCORS headers on the /v0.1/servers endpoints
DA Registry only restriction, without which the list isn't shown
Show the answer and why
AAn older /v0/servers endpoint, which IDEs still request first
Incorrect
The v0 specification is considered unstable and should not be implemented; clients use v0.1.
BA copilot-setup-steps.yml file that starts the registry inside every agent session
Incorrect
Setup steps prepare cloud agent's environment; IDEs fetch the registry from its own HTTPS URL.
CCORS headers on the /v0.1/servers endpoints
Correct
Copilot makes cross-origin requests to the registry, so those endpoints need Access-Control-Allow-Origin and related headers.
DA Registry only restriction, without which the list isn't shown
Incorrect
The restriction controls which servers may run; the list is fetched either way.
A self-hosted MCP registry is a set of HTTPS endpoints that follow the v0.1 MCP registry specification: GET /v0.1/servers, GET /v0.1/servers/{serverName}/versions/latest and GET /v0.1/servers/{serverName}/versions/{version}. Because Copilot makes cross-origin requests to fetch it, the registry or a reverse proxy must add CORS headers, such as Access-Control-Allow-Origin: *, to the /v0.1/servers endpoints.
An enterprise defines allowedMcpServers and deniedMcpServers in managed-settings.json. Which statements describe how Copilot clients evaluate a server against these lists? (Choose TWO.)
AThe built-in GitHub MCP server is allowed without appearing in the allowlist
BA server matching a deniedMcpServers entry is blocked even if it also matches the allowlist
CIndividual tools of a server are allowed one by one through allowedMcpServers entries
DA malformed allowlist is ignored, so every server is allowed
EMatching is by server name only, so users can rename a server to pass
Show the answer and why
AThe built-in GitHub MCP server is allowed without appearing in the allowlist
Correct
Clients always allow built-in default servers, such as the built-in GitHub MCP server.
BA server matching a deniedMcpServers entry is blocked even if it also matches the allowlist
Correct
Deny entries are checked first and block a server unconditionally.
CIndividual tools of a server are allowed one by one through allowedMcpServers entries
Incorrect
allowedMcpServers entries identify whole servers, not individual tools; tool selection is configured elsewhere.
DA malformed allowlist is ignored, so every server is allowed
Incorrect
A malformed list is treated as an empty allowlist, which blocks all but the built-in defaults.
EMatching is by server name only, so users can rename a server to pass
Incorrect
Entries can match on more than a server's name.
Copilot clients evaluate MCP servers in order: always allow built-in default servers, block anything matching deniedMcpServers, and block anything not matching allowedMcpServers when that list exists. A malformed list is treated as an empty allowlist.
A custom agent profile copied from VS Code declares an MCP server with type: stdio. How does Copilot cloud agent treat this type?
AAs its local type, to which stdio is mapped
BAs an error, because only http is accepted
CAs a remote server reached over SSE
DAs a disabled server until the type is renamed
Show the answer and why
AAs its local type, to which stdio is mapped
Correct
For compatibility, stdio from Claude Code and VS Code maps to cloud agent's local type.
BAs an error, because only http is accepted
Incorrect
Cloud agent accepts local, stdio, http and sse.
CAs a remote server reached over SSE
Incorrect
stdio describes a local process, not a remote server.
DAs a disabled server until the type is renamed
Incorrect
No rename is needed; stdio is mapped automatically.
The mcp-servers property in an agent profile is a YAML form of the repository MCP JSON configuration. Cloud agent accepts the types local, stdio, http and sse, and for compatibility the stdio type used by Claude Code and VS Code is mapped to cloud agent's local type.
A developer runs the GitHub MCP server locally in Docker and can't find the toolset that works with Copilot cloud agent. What explains this?
AThe copilot toolset is part of the default set and must be removed first
BDocker images can only expose read-only tools
CToolsets are configured only through URL path parameters
DThe copilot toolset is available only on the remote server
Show the answer and why
AThe copilot toolset is part of the default set and must be removed first
Incorrect
The default toolsets are repos, issues and pull_requests.
BDocker images can only expose read-only tools
Incorrect
The local server can be configured with read and write toolsets.
CToolsets are configured only through URL path parameters
Incorrect
Locally, toolsets are set with command-line flags or environment variables.
DThe copilot toolset is available only on the remote server
Correct
Remote-only toolsets such as copilot and github_support_docs_search aren't in the local server.
The GitHub MCP server enables the repos, issues and pull_requests toolsets by default. Some toolsets, such as copilot for Copilot cloud agent and github_support_docs_search, are only available on the remote server. The remote server takes toolsets in URL path parameters or headers; the local server uses flags or environment variables.
An administrator uses Azure API Center as the MCP registry and enters https://contoso-apic.data.eastus.azure-apicenter.ms/workspaces/default/v0.1/servers as the MCP Registry URL. The registry errors. What should the URL be?
AThe URL with /v0/servers instead
BThe API Center portal URL in the Azure portal
CThe same URL without /v0.1/servers
DThe URL without /workspaces/default
Show the answer and why
AThe URL with /v0/servers instead
Incorrect
The v0 specification is unstable and shouldn't be used.
BThe API Center portal URL in the Azure portal
Incorrect
The setting takes the API Center data endpoint, including the workspace path.
CThe same URL without /v0.1/servers
Correct
Copilot appends the registry API path itself, so extra route suffixes cause errors.
DThe URL without /workspaces/default
Incorrect
The base URL must include the workspace path.
When using Azure API Center as an MCP registry, enter the base URL including the workspace path, such as https://SERVICE-NAME.data.REGION.azure-apicenter.ms/workspaces/WORKSPACE-NAME. Adding route suffixes like /v0.1/servers makes the registry error, because Copilot appends the registry API path automatically.
Private MCP registries apply to Copilot CLI and IDEs but not to cloud agents that run on GitHub.
CVS Code
Incorrect
VS Code supports private registry enforcement.
DJetBrains IDEs
Incorrect
JetBrains IDEs support private registry enforcement.
Private MCP registries apply to Copilot CLI and IDEs, but not to cloud agents that run on GitHub. For Copilot cloud agent, MCP servers are configured at the repository level or in custom agent profiles, and the guardrails guidance lists private MCP registries among policies that don't apply to it.