Add session info to initialize response metadata #1651
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
The initialize response now includes
_meta.sessionInfowith user details (from get_me), enabled toolsets/tools, and configuration flags (readOnly, lockdown, dynamicToolsets).Why
Eliminates wasteful get_me tool call at session start. Users immediately see who they're authenticated as and what's enabled.
What changed
addSessionInfoMiddlewarethat enriches InitializeResult with session metadata during initializeaddUnauthenticatedSessionInfoMiddlewarefor OAuth flow (showsauthenticated: false, config only)MCP impact
Initialize response now includes optional
_meta.sessionInfofield. No breaking changes—clients ignore unknown metadata fields.Prompts tested (tool changes only)
N/A
Security / limits
User info only included when authenticated. Reuses existing get_me endpoint with same permissions.
Lint & tests
./script/lint./script/testDocs
Change is transparent to clients—metadata appears automatically in initialize response.
Example
Authenticated mode:
{ "_meta": { "sessionInfo": { "user": { "login": "octocat", "id": 583231, "profileURL": "https://github.com/octocat", "name": "The Octocat" }, "enabledToolsets": ["repos", "issues"], "toolsetsMode": "explicit", "readOnlyMode": false, "lockdownMode": false, "dynamicToolsets": false } } }Unauthenticated mode:
{ "_meta": { "sessionInfo": { "authenticated": false, "enabledToolsets": ["context", "issues", "pull_requests", "repos", "users"], "toolsetsMode": "default", "readOnlyMode": false, "lockdownMode": false, "dynamicToolsets": false } } }Original prompt
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.