feat: add mcp_servers field to app manifest#580
Open
zimeg wants to merge 3 commits into
Open
Conversation
Support MCP server configuration in the app manifest with url, auth_provider_key, and auth_type fields for Slack MCP Client integration. Co-Authored-By: Claude <svc-devxp-claude@slack-corp.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #580 +/- ##
==========================================
+ Coverage 71.64% 71.66% +0.02%
==========================================
Files 226 226
Lines 19148 19148
==========================================
+ Hits 13718 13723 +5
+ Misses 4221 4218 -3
+ Partials 1209 1207 -2 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Co-Authored-By: Claude <svc-devxp-claude@slack-corp.com>
srtaalej
approved these changes
Jun 9, 2026
srtaalej
left a comment
Contributor
There was a problem hiding this comment.
looks great!! mcp_servers serializing correctly ⭐
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Changelog
Summary
This pull request adds the
mcp_serversfield to the app manifest struct, so apps can make MCP server connections available.Supported fields:
url: Required. HTTPS endpoint of the MCP serverauth_provider_key: Optional. Reference to anexternal_auth_providersentry for OAuthauth_type: Required. Authentication method -no_auth,slack_identity_auth,manual_auth, ordynamic_client_registrationSchema definition: slackapi/manifest-schema#71
Testing
With the
mcp:connectscope included please confirm the following manifests are installed as expected or that all values appear with:No authentication
{ "display_information": { "name": "MCP Docs Server", "description": "Serves public Slack documentation from MCP" }, "features": { "bot_user": { "display_name": "MCP Docs Server", "always_online": true } }, "oauth_config": { "scopes": { "bot": ["mcp:connect"] } }, "settings": { "org_deploy_enabled": true, "socket_mode_enabled": false, "token_rotation_enabled": false }, "mcp_servers": { "docs": { "url": "https://88bf-170-39-168-237.ngrok-free.app/mcp", "auth_type": "no_auth" } } }Slack-identity authentication
{ "display_information": { "name": "MCP Profile Card", "description": "Looks up Slack user profiles using Slack identity auth" }, "features": { "app_home": {}, "bot_user": { "display_name": "MCP Profile Card", "always_online": true } }, "oauth_config": { "redirect_urls": [ "https://88bf-170-39-168-237.ngrok-free.app/slack/oauth_redirect" ], "scopes": { "bot": [ "mcp:connect", "users:read", "users:read.email" ] } }, "settings": { "socket_mode_enabled": false, "org_deploy_enabled": true, "token_rotation_enabled": false }, "mcp_servers": { "profile": { "url": "https://88bf-170-39-168-237.ngrok-free.app/mcp", "auth_type": "slack_identity_auth" } } }Standard OAuth handshakes
{ "display_information": { "name": "MCP GitHub Server", "description": "Connects to GitHub with External Auth Provider" }, "features": { "app_home": {}, "bot_user": { "display_name": "MCP GitHub Server", "always_online": true } }, "oauth_config": { "scopes": { "bot": [ "mcp:connect" ] } }, "settings": { "socket_mode_enabled": false, "org_deploy_enabled": true, "token_rotation_enabled": false }, "external_auth_providers": { "oauth2": { "github": { "provider_type": "CUSTOM", "options": { "client_id": "YOUR_GITHUB_CLIENT_ID", "scope": [], "provider_name": "GitHub", "authorization_url": "https://github.com/login/oauth/authorize", "token_url": "https://github.com/login/oauth/access_token", "identity_config": { "url": "https://api.github.com/user", "account_identifier": "$.login" }, "use_pkce": false, "token_url_config": { "use_basic_auth_scheme": false } } } } }, "mcp_servers": { "github": { "url": "https://api.githubcopilot.com/mcp/", "auth_provider_key": "github", "auth_type": "manual_auth" } } }Dynamic client registration
{ "display_information": { "name": "MCP Notion Server", "description": "Connects to Notion with Dynamic Client Registration" }, "features": { "bot_user": { "display_name": "MCP Notion Server", "always_online": true } }, "oauth_config": { "scopes": { "bot": ["mcp:connect"] } }, "settings": { "org_deploy_enabled": true, "socket_mode_enabled": false, "token_rotation_enabled": false }, "mcp_servers": { "notion": { "url": "https://mcp.notion.com/mcp", "auth_type": "dynamic_client_registration" } } }Notes
external_auth_providersfield already exists andmcp_serversreferencesauth_provider_keyusing these valuesuse_pkceandtoken_url_configfields added in the schema PR are already supported here since oauth2 provider options use a passthrough*RawJSONvalueRequirements