Linear MCP Server + Slack MCP Server

Beginner20 minutes
Use Cases

Common Use Cases

  • Sprint progress updates
  • Blocker alerts
  • Cycle review summaries
  • Issue assignment notifications
Before You Begin

Prerequisites

  • Linear workspace with active cycles
  • Slack workspace
Walkthrough

Step-by-Step Guide

1

Configure Linear MCP Server

Set up with your Linear API key.

2

Configure Slack MCP Server

Set up with bot token.

3

Build Sprint Summary

Generate a sprint progress report from Linear cycle data.

async function sprintUpdate() {
  const cycle = await linear.getActiveCycle({ teamId: TEAM_ID });
  const issues = await linear.listIssues({ cycleId: cycle.id });
  const done = issues.filter(i => i.state.type === "completed").length;
  const inProgress = issues.filter(i => i.state.type === "started").length;
  const blocked = issues.filter(i => i.labels.some(l => l.name === "blocked"));
  await slack.sendMessage({
    channel: "#engineering",
    text: `šŸ“‹ Sprint Update:\nāœ… Done: ${done}/${issues.length}\nšŸ”„ In Progress: ${inProgress}\n🚫 Blocked: ${blocked.length}`
  });
}
4

Schedule Daily Updates

Run the sprint summary every day at standup time.

Examples

Code Examples

typescript
Blocker Alert
async function alertBlockers() {
  const blocked = await linear.listIssues({ filter: { label: { name: { eq: "blocked" } } } });
  if (blocked.length > 0) {
    const list = blocked.map(i => `• *${i.identifier}*: ${i.title} (assigned: ${i.assignee?.name || "unassigned"})`).join("\n");
    await slack.sendMessage({ channel: "#engineering", text: `🚫 ${blocked.length} Blocked Issues:\n${list}` });
  }
}
Help

Troubleshooting

How often should I post updates?+
Can I include velocity metrics?+

Quick Info

DifficultyBeginner
Time Estimate20 minutes
Tools
Linear MCP ServerSlack MCP Server

Need Integration Help?

Our team can implement this integration for you.

Get in Touch