[FEATURE] Slack MCP Plugin: Add Custom Profile Fields Support
[FEATURE] Slack MCP Plugin: Add Custom Profile Fields Support
Summary
The Slack MCP plugin's slack_read_user_profile tool should expose custom profile fields (including Manager, Department, etc.) that are available via the Slack API but currently omitted from responses.
Current Behavior
When using slack_read_user_profile, the tool returns only standard Slack profile fields:
- Title
- Real Name
- Display Name
- Phone
- Timezone
- Status
Missing: Custom profile fields defined in the Slack workspace (e.g., Manager, Department, Start Date, etc.)
Expected Behavior
The tool should include a fields object in the response containing all custom profile fields, matching what the Slack API actually returns:
{
"profile": {
"email": "user@example.com",
"title": "Senior Engineer",
"real_name": "Jane Doe",
"fields": {
"Xf0111111": {
"value": "John Smith",
"alt": "",
"label": "Manager"
},
"Xf0222222": {
"value": "Engineering",
"alt": "",
"label": "Department"
}
}
}
}
Technical Details
Slack API Support
The Slack API already returns custom fields via users.profile.get:
curl -X GET "https://slack.com/api/users.profile.get?user=U01234567" \
-H "Authorization: Bearer xoxb-token"
Response includes:
{
"ok": true,
"profile": {
...
"fields": {
"Xf0123456": {
"value": "Manager Name",
"alt": ""
}
}
}
}
Field Label Mapping
To map field IDs (like Xf0123456) to human-readable labels (like "Manager"), the Slack API provides team.profile.get:
curl -X GET "https://slack.com/api/team.profile.get" \
-H "Authorization: Bearer xoxb-token"
Response:
{
"profile": {
"fields": [
{
"id": "Xf0123456",
"label": "Manager",
"type": "text",
"ordering": 0
}
]
}
}
Required Scopes
users.profile:read- Already required by the pluginteam:read- Needed to fetch field definitions (optional, for label mapping)
Use Case
Finding organizational hierarchy in Slack workspaces:
User asks: "What is the chain of command for User A?"
Expected workflow:
- Get user profile with
slack_read_user_profile - Extract Manager field from custom fields
- Get manager's profile recursively
- Build organizational hierarchy
Currently impossible because custom fields are not exposed.
Implementation Suggestion
Option 1: Include Raw Fields (Minimal Change)
Simply include the fields object as-is in the response:
// Current: Returns only standard fields
return {
email: profile.email,
title: profile.title,
// ... standard fields only
}
// Proposed: Also include custom fields
return {
email: profile.email,
title: profile.title,
// ... standard fields
fields: profile.fields // Add this
}
Option 2: Include Fields with Labels (Better UX)
Fetch field definitions and map IDs to labels:
// Fetch field definitions once (can be cached)
const fieldDefs = await slack.team.profile.get()
// Map IDs to labels
const customFields = {}
for (const [id, value] of Object.entries(profile.fields)) {
const fieldDef = fieldDefs.find(f => f.id === id)
customFields[fieldDef?.label || id] = value.value
}
return {
email: profile.email,
title: profile.title,
// ... standard fields
customFields: customFields // e.g., { "Manager": "Jane Smith", "Department": "Engineering" }
}
Comparison with Other MCP Implementations
Research shows all current Slack MCP implementations have the same limitation:
modelcontextprotocol/servers-archived- Calls API correctly but doesn't parsefieldsmynghn/slack-mcp-server- Same issueAVIMBU/slack-mcp-server- Doesn't even implement profile details
This is a universal gap in Slack MCP implementations, not a Slack API limitation.
Related Issues
- #35995 - Slack MCP integration issues (message tools)
- #33117 - Slack user autocomplete
Priority
Medium - Blocks organizational hierarchy queries and workspace structure understanding
Workaround
None available without direct Slack API access (creating custom Slack app with bot token).
---
Environment:
- Claude Code: Sonnet 4.5
- Platform: macOS
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗