Skip to content

feat: add mcp_servers field to app manifest#580

Open
zimeg wants to merge 3 commits into
mainfrom
feat/add-mcp-servers-manifest-field
Open

feat: add mcp_servers field to app manifest#580
zimeg wants to merge 3 commits into
mainfrom
feat/add-mcp-servers-manifest-field

Conversation

@zimeg

@zimeg zimeg commented Jun 4, 2026

Copy link
Copy Markdown
Member

Changelog

The mcp_server manifest fields are supported for connecting MCP servers to Slack.

Summary

This pull request adds the mcp_servers field to the app manifest struct, so apps can make MCP server connections available.

Supported fields:

  • url: Required. HTTPS endpoint of the MCP server
  • auth_provider_key: Optional. Reference to an external_auth_providers entry for OAuth
  • auth_type: Required. Authentication method - no_auth, slack_identity_auth, manual_auth, or dynamic_client_registration

Schema definition: slackapi/manifest-schema#71

Testing

With the mcp:connect scope included please confirm the following manifests are installed as expected or that all values appear with:

$ slack manifest
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

  • The external_auth_providers field already exists and mcp_servers references auth_provider_key using these values
  • The use_pkce and token_url_config fields added in the schema PR are already supported here since oauth2 provider options use a passthrough *RawJSON value

Requirements

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

codecov Bot commented Jun 4, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 71.66%. Comparing base (e37243b) to head (1538e8e).

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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@zimeg zimeg self-assigned this Jun 9, 2026
@zimeg zimeg added enhancement M-T: A feature request for new functionality changelog Use on updates to be included in the release notes semver:minor Use on pull requests to describe the release version increment labels Jun 9, 2026
@zimeg zimeg marked this pull request as ready for review June 9, 2026 16:43
@zimeg zimeg requested a review from a team as a code owner June 9, 2026 16:43
@zimeg zimeg added this to the Next Release milestone Jun 9, 2026

@srtaalej srtaalej left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks great!! mcp_servers serializing correctly ⭐

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog Use on updates to be included in the release notes enhancement M-T: A feature request for new functionality semver:minor Use on pull requests to describe the release version increment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants