[FEATURE] Slack MCP Plugin: Add Custom Profile Fields Support

Resolved 💬 2 comments Opened Mar 30, 2026 by ns-tandrey Closed Mar 30, 2026

[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
  • Email
  • 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@company.com",
    "title": "Principal Engineer",
    "real_name": "User Name",
    "fields": {
      "Xf0111111": {
        "value": "Manager Name",
        "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=U02UCUXJHT8" \
  -H "Authorization: Bearer xoxb-token"

Response includes:

{
  "ok": true,
  "profile": {
    ...
    "fields": {
      "Xf0123456": {
        "value": "John Smith",
        "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 plugin
  • team: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 John Smeet?"

Expected workflow:

  1. Get user profile with slack_read_user_profile
  2. Extract Manager field from custom fields
  3. Get manager's profile recursively
  4. 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": "John Smith", "Department": "Engineering" }
}

Comparison with Other MCP Implementations

I researched alternative Slack MCP implementations and found all of them have the same limitation:

  • modelcontextprotocol/servers-archived - Calls API correctly but doesn't parse fields
  • mynghn/slack-mcp-server - Same issue
  • AVIMBU/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).

---

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗