Generate your daily standup from real GitHub, Jira, Linear, and Slack activity.
Generate your daily standup from real GitHub, Jira, Linear, and Slack activity.
standup-mcp is a well-architected MCP server for aggregating activity data from multiple tools (GitHub, Jira, Linear, Slack). The codebase demonstrates strong security practices: all integrations are read-only, credentials are properly sourced from environment variables, API tokens are never logged or hardcoded, and the server uses standard authentication mechanisms for each platform. Permissions align appropriately with the server's purpose. Minor code quality observations exist but do not raise security concerns. Supply chain analysis found 2 known vulnerabilities in dependencies (0 critical, 2 high severity). Package verification found 1 issue.
7 files analyzed · 7 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Set these up before or after installing:
Environment variable: GITHUB_TOKEN
Environment variable: JIRA_BASE_URL
Environment variable: JIRA_EMAIL
Environment variable: JIRA_API_TOKEN
Environment variable: LINEAR_API_KEY
Environment variable: SLACK_TOKEN
Environment variable: SLACK_CHANNELS
Environment variable: STANDUP_NAME
Environment variable: STANDUP_DEMO_MODE
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-sathvic-kollu-standup-mcp": {
"env": {
"JIRA_EMAIL": "your-jira-email-here",
"SLACK_TOKEN": "your-slack-token-here",
"GITHUB_TOKEN": "your-github-token-here",
"STANDUP_NAME": "your-standup-name-here",
"JIRA_BASE_URL": "your-jira-base-url-here",
"JIRA_API_TOKEN": "your-jira-api-token-here",
"LINEAR_API_KEY": "your-linear-api-key-here",
"SLACK_CHANNELS": "your-slack-channels-here",
"STANDUP_DEMO_MODE": "your-standup-demo-mode-here"
},
"args": [
"-y",
"standup-mcp"
],
"command": "npx"
}
}
}From the project's GitHub README.
Generate your daily standup from what you actually did, across GitHub, Jira, Linear, and Slack.
Every standup, you stop and reconstruct yesterday from memory: which commits, which PR, which ticket you moved, that Slack thread where you said you were stuck. The work is already recorded across your tools. Re-typing it is the chore everyone hates, so updates come out vague ("worked on the thing") and real blockers go unsaid.
standup-mcp reads that activity back and writes the draft for you. You ask your AI assistant "what should I say at standup today?" and it answers from your real GitHub, Jira, Linear, and Slack activity: grouped by work item, in concrete deltas, with blockers it noticed on its own.
It is a standard Model Context Protocol server, so it works in any MCP client (Claude, Cursor, Cline, and more) on any model. It is local and read-only: nothing about your activity leaves your machine except the calls to those tools' own APIs, and it needs no AI API key of its own. The host client supplies the model.
The server ships with a realistic demo dataset and runs against it automatically when no credentials are set, so you see the output before connecting anything:
npx -y standup-mcp --demo
That prints a full standup from a synthetic day across all four tools. Here is the headline tool:
# Standup: Jordan Lee
_since Tue Jun 16. Demo data, no credentials configured._
## Yesterday
- **PROJ-412 Biometric re-auth** · opened PR #128, 3 commits, latest "handle expired challenge edge case", moved to In Progress, posted an update
- **ENG-88 Rate-limit the export endpoint** · 2 commits, latest "tests for limiter window", moved to In Progress, posted an update
- **PROJ-407 Card dispute webhook** · merged PR #125, moved to In Review
- Reviewed PR #129: Tidy currency formatting helpers
## Today
- Continue **PROJ-412 Biometric re-auth**
- Continue **ENG-88 Rate-limit the export endpoint**
- Land PR #128: Add biometric re-auth (review pending)
- Review PR #130: Refactor request logging
## Blockers
- 🔴 **PROJ-412 Biometric re-auth** · flagged blocked: "Blocked on the vendor sandbox creds for PROJ-412. Waiting on infra to provision them before I can test the re-auth flow…"; awaiting review
Notice the GitHub commits, the GitHub PR, and the Jira move all collapsed under PROJ-412, and the blocker was lifted from a Slack message on its own. Nobody typed any of that.
(Running npx -y standup-mcp with no flag starts the MCP server on stdio, which is what an MCP client launches. Use --demo to see output in a plain terminal.)
Five tools. Every one defaults to the last working day, and Monday automatically reaches back across the weekend, so you rarely pass arguments.
| Tool | What you get |
|---|---|
standup_draft | Your standup: Yesterday / Today / Blockers, grouped by work item, in concrete deltas. The answer to "what should I say at standup?" |
blocker_scan | Everything blocking you, ranked by severity, fused from explicit "blocked / waiting on" language, PRs awaiting review, stalled in-progress tickets, and help requests. |
weekly_summary | A week of activity rolled into Shipped vs In progress, with reviews and totals. For 1:1s, weekly status, and self-reviews. |
activity_digest | A chronological "what actually happened" across all tools, newest first, grouped by day. |
list_sources | Which sources are wired, or that you are on demo data. |
You talk to it in plain language through your AI client:
# Blockers
_since Tue Jun 16. Demo data._
**1 blocker**: 1 high, 0 medium, 0 low.
- 🔴 **PROJ-412 Biometric re-auth** (slack) · flagged blocked: "Blocked on the vendor sandbox creds for PROJ-412. Waiting on infra to provision them before I can test the re-auth flow…"; awaiting review
# Weekly summary: Jordan Lee
_the last 7 days. Demo data._
## Shipped
- **PROJ-407 Card dispute webhook**
## In progress
- **PROJ-412 Biometric re-auth**
- **ENG-88 Rate-limit the export endpoint**
## Reviews and support
- Reviewed 1 PR for teammates
_3 work items touched, 1 PR merged, 5 commits._
This is the part most tools gloss over. standup-mcp is built so that using it does not feel like installing surveillance on yourself:
Set any subset. Whatever you configure, it uses; with nothing set, it stays in demo mode. Restart the server after changing these.
| Variable | Source | Notes |
|---|---|---|
GITHUB_TOKEN | GitHub | Read-only PAT. Reads your commits, PRs, and reviews. |
JIRA_BASE_URL JIRA_EMAIL JIRA_API_TOKEN | Jira | Cloud site, account email, and an API token. Reads your ticket moves. |
LINEAR_API_KEY | Linear | A personal API key. Reads your issue state changes and comments. |
SLACK_TOKEN | Slack | A user token (xoxp) with search:read scans your own messages for blocker language. With a bot token instead, also set SLACK_CHANNELS (comma-separated channel ids) since bots cannot search. |
STANDUP_NAME | optional | Display name for the standup's owner. Without it, the GitHub handle is used. |
Verify your connections before wiring it into a client:
GITHUB_TOKEN=ghp_xxx LINEAR_API_KEY=lin_xxx npx -y standup-mcp --check
It prints, per source, the authenticated identity or a clear error.
standup-mcp speaks the Model Context Protocol, so any MCP-capable client can use it, whichever model is behind it: Claude Desktop, Claude Code, Cursor, Cline, Continue, Zed, Windsurf, and more. The server uses no AI API key of its own.
Add this to claude_desktop_config.json (Settings, Developer, Edit Config), then restart Claude Desktop:
{
"mcpServers": {
"standup": {
"command": "npx",
"args": ["-y", "standup-mcp"],
"env": {
"GITHUB_TOKEN": "ghp_your_token",
"JIRA_BASE_URL": "https://your-company.atlassian.net",
"JIRA_EMAIL": "you@company.com",
"JIRA_API_TOKEN": "your-jira-token",
"LINEAR_API_KEY": "lin_api_your_key",
"SLACK_TOKEN": "xoxp-your-token"
}
}
}
}
Leave the env block out entirely to run in demo mode first. Include only the sources you use.
claude mcp add standup \
-e GITHUB_TOKEN=ghp_your_token \
-e LINEAR_API_KEY=lin_api_your_key \
-- npx -y standup-mcp
These read the same mcpServers JSON as Claude Desktop, in the client's own MCP config. Use the block above. The server is identical; only the model driving the client differs.
The design goal is a clean seam between each tool and the standup logic.
ActivityEvent. Nothing downstream knows which tool a fact came from, which is exactly what lets it group by work item across tools.src/
index.ts MCP server, stdio transport, --demo/--check/--help
config.ts per-source env resolution, demo-mode detection
window.ts the weekend-aware "since last standup" window
provider.ts aggregator that fans out to configured sources
types.ts ActivityEvent and the source/provider interfaces
normalize.ts work-item key extraction, signal and noise detection
sources/ github, jira, linear, slack clients, plus the demo provider
analytics/ grouping, blockers, draft, weekly, digest (pure functions)
tools/ one MCP tool per file, thin wrappers over analytics
npm test).test/normalize.test.ts).test/draft.test.ts).npm run smoke).The demo dataset proves the engine. It does not prove each live client against every real account shape, which is why the parse layer is unit tested separately and each source is kept small and tolerant. Run --check to confirm your own connections, and if a response shape does not parse cleanly on your account, open an issue.
team_standup view that rolls up several people for the PM running the meetingI run delivery for SaaS and fintech teams, and I build tools like this with Claude Code. If this saves you the daily standup chore, I would like to hear how you use it.
Issues and pull requests are welcome.
MIT. See LICENSE.
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.