Standup Mr
io.github.Jubstaaa由 GitHub 账号 Jubstaaa 发布v1.1.1更新于 Oct 28, 2026
Standup notes from merge request state, with the failed job's error lines.
概览
读取 GitHub 或 GitLab 的合并请求状态,包括失败流水线的错误行,让助手据此撰写并发布站会汇报。
- 可以做什么
- 以 JSON 形式获取 GitHub 或 GitLab 的站会数据:可合并、受阻、草稿和过期的合并请求、待处理评审以及阻塞项
- 打开失败流水线的作业日志,返回说明合并请求为何受阻的错误行
- 返回汇报撰写规则,让助手把摘要整理成可朗读的站会汇报
- 把写好的汇报发送到 Slack、Discord 或 Google Chat 的 webhook
- 适用场景
- 适合需要根据仓库中真正可合并、受阻或等待评审的内容生成每日站会摘要,而不是依据本地提交历史的场景。也适合在不手动打开作业日志的情况下快速查明流水线为何失败。
- 运行要求
- 可使用带 OAuth 登录的远程托管端点(无需令牌),或在本地用 Node 20 及以上运行 npm 包。本地使用需通过 GITHUB_HOST/GITHUB_TOKEN 或 GITLAB_HOST/GITLAB_TOKEN 提供主机与令牌,或已有 gh/glab 命令行登录会话;GitLab 必须提供 GITLAB_HOST。发布汇报需在 STANDUP_WEBHOOK_URL 中配置 webhook 地址。需要能访问服务商 API 的网络。
安装
在 SourceWeft 中
- 打开 控制台中的 Standup Mr,将其添加到工作区。
- 连接 所需的 凭据。它们会被私密存储,绝不会在公开页面上展示。
- 为需要使用其工具的对话启用该服务。
Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。
交给智能体安装
把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。
阅读 https://sourceweft.com/mcp/io.github.Jubstaaa%2Fstandup-mr/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。其他 MCP 客户端
把它添加到你客户端的 mcpServers 配置中。 客户端会在首次连接时完成 OAuth 登录。
{
"mcpServers": {
"standup-mr": {
"type": "http",
"url": "https://standup.ilkerbalcilar.com/mcp"
}
}
}README
standup-mr
[standup-mr MCP server] [Listed on mcpservers.org] [smithery badge] [mcprush grade]
Standup notes from merge request state, not commit logs.
Most standup tools read your local git log. That answers "what did I type",
which is not what anyone asks in a standup. This one reads GitLab or GitHub:
what is ready to merge, what is blocked, what is waiting on you — and when a
pipeline is red, it opens the job log and tells you why.
[standup-mr reading a GitLab project: ready, blocked, draft, and the error line from a failed job]
What makes it different
Use
Identity
GitHub defaults to github.com when no host is given. GitLab has no default —
self-hosted is the norm there, so a host must come from a flag, env var, or
glab's own config.
The provider itself is picked in this order:
--provider github/--provider gitlab, if passed- a recognizable
--host(github.com,gitlab.com, or a hostname containinggithub/gitlab) STANDUP_PROVIDER, or whichever of theGITHUB_*/GITLAB_*env pairs is set- whichever of
gh/glabis logged in
If none of these resolve — or both do, ambiguously — the command fails with a clear error instead of guessing.
So if you already use gh or glab, there is nothing to configure.
Post it to chat
Hosted connector: any AI assistant
No token, no config file — sign in instead. The hosted server speaks the standard MCP OAuth flow, so any assistant that supports remote MCP servers can use it: add the URL, and a browser page opens where you sign in.
[Add to Cursor] [Install in VS Code]
claude.ai and Claude Code are tested end to end; the others use the same standard flow. If one of them doesn't sign in, please open an issue.
On the sign-in page you link the accounts the note should read:
- GitHub — sign in through the standup-mr GitHub App. It only sees the repositories it is installed on, so install it on your org too; if the org won't approve it, add github.com with a fine-grained token instead.
- gitlab.com — sign in with GitLab.
- Your company's GitLab or GitHub Enterprise — type the host. If someone at your company already set up sign-in, you get a "Sign in with …" button. Otherwise set it up once: the page shows the exact redirect URI and scopes for an OAuth application on your host, you paste its ID and secret, and everyone at that host can sign in from then on. A read-only token works too.
- Chat webhook (optional) — Slack, Discord or Google Chat, so your assistant can post the finished note when you ask it to.
Link as many as you like — say, GitHub for side projects and your company's GitLab for work — then ask for "my standup" or "my work standup". With several accounts linked, the assistant asks which one you mean.
Added in an assistant with a mobile app — Claude or ChatGPT — it works from your phone too: ask for your standup on the way to the meeting.
What is stored. Your provider tokens and webhook URL, encrypted with
AES-256-GCM, and only to read your merge requests and post your note. The
access tokens your assistant holds are stored as hashes. Disconnecting it
deletes everything; connections unused for 30 days are deleted. The server is
the code in remote/.
When to use the local server instead. A GitLab behind a VPN or on a private network is out of reach of a hosted server. Run the stdio server below on your own machine — the token never leaves it.
The four surfaces
CLI — the core. Emits JSON; zero runtime dependencies.
MCP server (mcp/) — three tools for Claude Desktop, Claude Code, Cursor,
or any MCP client that runs a local process. See mcp/README.md.
Remote MCP server (remote/) — the same tools over HTTPS with sign-in, for
any assistant that supports remote MCP servers, including the web and mobile
apps. See above.
Claude Code plugin — the note-writing playbook, shipped as the standup
skill. From inside Claude Code:
Then type /standup. Updates come with /plugin marketplace update standup-mr.
Using it from Cursor, Codex, or another assistant
If you're not using Claude Code, wire up the MCP server for live data and paste in the note-writing rules separately.
Cursor — add to ~/.cursor/mcp.json (global) or .cursor/mcp.json
(project-local):
Codex — add to ~/.codex/config.toml:
The exact config key and file path are version-dependent for both clients — if a snippet above doesn't work, check Cursor's MCP docs or Codex's own config documentation for the current format rather than trusting this file blindly.
The server exposes three tools:
post_standup_note reads the webhook URL from STANDUP_WEBHOOK_URL and never
takes it as an argument — anyone holding that URL can post to the channel, so
it belongs with the tokens, not in a transcript. The payload shape is inferred
from the URL host; kind is only needed when a proxy hides it.
Three shapes are implemented: slack and google-chat both post {"text"},
discord posts {"content"}.
Slack and Google Chat do not render standard Markdown, so the note is rewritten
on the way out: **bold** becomes *bold* and a ## heading becomes a bold
line. Inline code, fenced blocks and their contents are left alone. Discord
speaks Markdown natively and is sent untouched. Anything else that accepts a Slack-shaped body —
Mattermost, Rocket.Chat, an n8n or Zapier endpoint — works today by passing
kind: "slack", or --slack URL on the CLI.
Outside MCP, the same rules are available on stdout:
--markdown is a digest, not a written note
--markdown organizes the raw material into readable sections. It does not
group events into themes or diagnose blockers — that is the model's work, and it
lives in the MCP client's prompt or in the Claude Code skill.
- Without AI: a structured digest.
- With AI: a note you can read out.
What the digest looks like
Anonymised output from a real Monday run — note that Friday and Saturday each get their own section, and that a merge request GitLab has not evaluated is not called ready:
The last section is the point of the tool. Every other standup tool can tell you that pipeline is red; this one opens the failed job's log and shows you the 404 — and a 404 rather than a 403 usually means the token's scope is wrong, not that the package is missing.
Stability
Since 1.0.0 the CLI commands and flags, the JSON that fetch and
get_standup_data return, the MCP tool names and arguments, and the
environment variables follow semantic versioning: a
change that would break an existing setup waits for a major release. New
fields in the JSON may appear in minor releases, so read it by name rather
than by position. The hosted server at standup.ilkerbalcilar.com is
updated continuously and is not tied to the npm version.
Known limits
- GitHub's events feed is shallow. It is capped at roughly 300 events over the last 90 days, so a very active account or an old gap can silently lose the earliest events. GitLab has no comparable documented cap.
- GitHub activity is only visible to a token belonging to that same account, and private-repository events do not show up for anyone else's token, even with otherwise sufficient scopes.
- On GitHub, CI that reports only through the legacy commit-statuses API
— still how some vendors integrate — shows up as
pipelineMissing. Check state is read from check-runs only. - A blocker whose diagnosis could not be fetched is still reported, as
job: "unknown"with adiagnosis unavailable: …error line. The merge request is blocked either way; only the explanation is missing. Server errors are retried twice first, and a rejected token still fails the run.
Upgrading from 0.1.x
0.2.0 changes the JSON output, the library API, and the MCP options. If you
pipe standup fetch into anything, or import the package, read
CHANGELOG.md before upgrading. The short version:
previousandpreviousEventsare replaced bypreviousDays[], one entry per active day, so a weekend no longer swallows Friday.jq .previousnow returnsnullwith no error.MergeRequest,ReviewandBlockercarry a requiredproviderfield, andProvider.getReviewstakes anIdentityrather than a numeric id.- The MCP
CollectOptions.provideris now a provider name; inject aProviderinstance throughproviderImpl.
Claude Code plugin users should run /plugin marketplace update standup-mr —
the standup skill changed along with the report shape.
Requirements
Node 20 or newer. The CLI core (fetch, post, instructions) pulls no
runtime dependencies. The MCP server (mcp command) brings one:
@modelcontextprotocol/sdk.
License
MIT
来源:README.md,提交 475ad20
工具
0版本历史
4- v1.1.1最新Oct 13, 2026
- v1.1.0Oct 12, 2026
- v0.7.0Oct 11, 2026
- v0.6.1Sep 16, 2026
评分
已满足适用检查项的 85%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通必需25 分
- 已声明认证方式必需10 分
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分