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