standup-mr 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/README.md +1 -0
- package/dist/mcp/server.js +6 -4
- package/llms-install.md +79 -0
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,21 @@ All notable changes to standup-mr are recorded here. The format follows
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project uses
|
|
5
5
|
[semantic versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [0.4.1] - 2026-09-02
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- `get_standup_data` documents itself properly. The description now gives the
|
|
12
|
+
shape of the object it returns, says the tool is a snapshot rather than a
|
|
13
|
+
search API and what that rules out, and spells out failure behaviour: a
|
|
14
|
+
rejected token, a refused resource or a rate limit surfaces the host's own
|
|
15
|
+
message after two retries on transient errors, and a blocker whose
|
|
16
|
+
diagnosis could not be fetched still comes back with `job: "unknown"`. The
|
|
17
|
+
parameter descriptions gained the interactions the schema cannot express —
|
|
18
|
+
`host` is required for GitLab and optional for GitHub, a recognisable host
|
|
19
|
+
settles `provider` on its own, and `lang` relabels dates without
|
|
20
|
+
translating anything.
|
|
21
|
+
|
|
7
22
|
## [0.4.0] - 2026-09-01
|
|
8
23
|
|
|
9
24
|
### Added
|
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# standup-mr
|
|
2
2
|
|
|
3
3
|
[](https://glama.ai/mcp/servers/Jubstaaa/standup-mr)
|
|
4
|
+
[](https://mcpservers.org/servers/jubstaaa/standup-mr)
|
|
4
5
|
|
|
5
6
|
Standup notes from **merge request state**, not commit logs.
|
|
6
7
|
|
package/dist/mcp/server.js
CHANGED
|
@@ -1044,15 +1044,16 @@ async function collect(options = {}) {
|
|
|
1044
1044
|
const provider = options.providerImpl ?? connect({ provider: options.provider, host: options.host, token: options.token });
|
|
1045
1045
|
return buildReport(provider, /* @__PURE__ */ new Date(), options.lang ?? "en");
|
|
1046
1046
|
}
|
|
1047
|
+
var STANDUP_TOOL_DESCRIPTION = 'Collect merge-request-based standup data from GitLab or GitHub. Returns one JSON object: `today`, `previousDays[]` with the events of each, `todayEvents[]`, `myMrs[]` bucketed ready / blocked / draft / stale, `reviews[]` waiting on you, and `blockers[]` carrying the error lines read out of each failed pipeline job log.\n\nCall it once at the start of a working day, to write a standup note. It is a snapshot, not a search API: it cannot fetch one named merge request, reach further back than the previous working day, or filter by project.\n\nRead-only, and credentials never come from an argument \u2014 they come from the environment or a logged-in gh / glab session. A rejected token, a refused resource or a rate limit fails the call with the host\'s own message, after two retries on transient server errors. A blocker whose diagnosis could not be fetched is still returned, with `job: "unknown"`, so a red pipeline is never silently dropped.';
|
|
1047
1048
|
var STANDUP_TOOL_SCHEMA = {
|
|
1048
1049
|
provider: z.enum(["github", "gitlab"]).optional().describe(
|
|
1049
|
-
"Which provider to read. Omit to auto-detect, in this order: a recognisable host, STANDUP_PROVIDER, a GITHUB_*/GITLAB_* environment pair, then whichever of the gh / glab CLIs is logged in."
|
|
1050
|
+
"Which provider to read. Omit to auto-detect, in this order: a recognisable host, STANDUP_PROVIDER, a GITHUB_*/GITLAB_* environment pair, then whichever of the gh / glab CLIs is logged in. Pass it when both are configured \u2014 ambiguity fails the call rather than being guessed at."
|
|
1050
1051
|
),
|
|
1051
1052
|
host: z.string().optional().describe(
|
|
1052
|
-
"Self-hosted host, without a scheme, e.g. gitlab.example.com or github.example.com. GitHub defaults to github.com
|
|
1053
|
+
"Self-hosted host, without a scheme, e.g. gitlab.example.com or github.example.com. Required for GitLab, which has no default host; optional for GitHub, which defaults to github.com. A recognisable host also settles `provider` on its own, so the two are rarely both needed."
|
|
1053
1054
|
),
|
|
1054
1055
|
lang: z.enum(["en", "tr"]).optional().describe(
|
|
1055
|
-
"Language for the date labels inside the returned JSON
|
|
1056
|
+
"Language for the date labels inside the returned JSON: en (default) or tr. It relabels dates and nothing else \u2014 no field is translated, and the standup note itself is written by the caller, in whatever language they are speaking."
|
|
1056
1057
|
)
|
|
1057
1058
|
};
|
|
1058
1059
|
async function runStandupTool(args, collector = collect) {
|
|
@@ -1067,7 +1068,7 @@ async function main() {
|
|
|
1067
1068
|
const server = new McpServer({ name: "standup-mr", version: packageVersion(import.meta.url) });
|
|
1068
1069
|
server.tool(
|
|
1069
1070
|
"get_standup_data",
|
|
1070
|
-
|
|
1071
|
+
STANDUP_TOOL_DESCRIPTION,
|
|
1071
1072
|
STANDUP_TOOL_SCHEMA,
|
|
1072
1073
|
async (args) => await runStandupTool(args)
|
|
1073
1074
|
);
|
|
@@ -1088,6 +1089,7 @@ if (entryUrl && import.meta.url === entryUrl) {
|
|
|
1088
1089
|
});
|
|
1089
1090
|
}
|
|
1090
1091
|
export {
|
|
1092
|
+
STANDUP_TOOL_DESCRIPTION,
|
|
1091
1093
|
STANDUP_TOOL_SCHEMA,
|
|
1092
1094
|
collect,
|
|
1093
1095
|
main,
|
package/llms-install.md
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Installing standup-mr
|
|
2
|
+
|
|
3
|
+
Instructions for an AI assistant setting this MCP server up on a user's
|
|
4
|
+
machine. Everything here is verified against the published package.
|
|
5
|
+
|
|
6
|
+
## What it needs
|
|
7
|
+
|
|
8
|
+
- Node.js 20 or newer. Nothing to clone, nothing to build — the server runs
|
|
9
|
+
straight from npm.
|
|
10
|
+
- Read access to the user's GitLab or GitHub. It never takes a credential as
|
|
11
|
+
a tool argument; credentials come from the environment or from a logged-in
|
|
12
|
+
`gh` / `glab` session.
|
|
13
|
+
|
|
14
|
+
## Config
|
|
15
|
+
|
|
16
|
+
Add this to the MCP settings file (for Cline,
|
|
17
|
+
`cline_mcp_settings.json`):
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{
|
|
21
|
+
"mcpServers": {
|
|
22
|
+
"standup": {
|
|
23
|
+
"command": "npx",
|
|
24
|
+
"args": ["-y", "standup-mr", "mcp"],
|
|
25
|
+
"env": {}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
That is the whole install when the user already has `gh` or `glab` logged in
|
|
32
|
+
— leave `env` empty and the server picks the session up.
|
|
33
|
+
|
|
34
|
+
## Credentials, when there is no CLI session
|
|
35
|
+
|
|
36
|
+
Add only the pair the user actually needs.
|
|
37
|
+
|
|
38
|
+
| Variable | When |
|
|
39
|
+
|---|---|
|
|
40
|
+
| `GITHUB_TOKEN` | GitHub, no `gh` session |
|
|
41
|
+
| `GITHUB_HOST` | GitHub Enterprise only; defaults to `github.com` |
|
|
42
|
+
| `GITLAB_TOKEN` | GitLab, no `glab` session |
|
|
43
|
+
| `GITLAB_HOST` | **Required for GitLab** — there is no default host |
|
|
44
|
+
| `STANDUP_PROVIDER` | `github` or `gitlab`, when both are configured and the choice is ambiguous |
|
|
45
|
+
|
|
46
|
+
Ask the user for a token; do not invent one, and do not put a token anywhere
|
|
47
|
+
but `env`.
|
|
48
|
+
|
|
49
|
+
## The one tool
|
|
50
|
+
|
|
51
|
+
`get_standup_data` returns the previous working day's activity, open merge
|
|
52
|
+
requests bucketed by state (ready / blocked / draft / stale), pending
|
|
53
|
+
reviews, and the error lines from any failed pipeline job. All three
|
|
54
|
+
arguments are optional:
|
|
55
|
+
|
|
56
|
+
- `provider` — `github` or `gitlab`; omit to auto-detect
|
|
57
|
+
- `host` — self-hosted host, no scheme
|
|
58
|
+
- `lang` — `en` or `tr`; changes date labels in the JSON only
|
|
59
|
+
|
|
60
|
+
## Verifying the install
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npx -y standup-mr mcp
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
It speaks MCP over stdio and writes nothing else to stdout. A successful
|
|
67
|
+
`initialize` reports `{"name":"standup-mr","version":"<current>"}`.
|
|
68
|
+
|
|
69
|
+
If the user is not on an MCP client, `npx standup-mr fetch --markdown`
|
|
70
|
+
prints the same data as a digest.
|
|
71
|
+
|
|
72
|
+
## Writing the note
|
|
73
|
+
|
|
74
|
+
The tool returns data, not prose. The note-writing rules live in the bundled
|
|
75
|
+
skill; pour them into whatever instructions file the assistant reads:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
npx standup-mr instructions >> AGENTS.md
|
|
79
|
+
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "standup-mr",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"mcpName": "io.github.Jubstaaa/standup-mr",
|
|
5
5
|
"description": "Standup notes from merge request state, not commit logs.",
|
|
6
6
|
"keywords": [
|
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
"dist",
|
|
49
49
|
"skills",
|
|
50
50
|
"mcp/README.md",
|
|
51
|
+
"llms-install.md",
|
|
51
52
|
"README.md",
|
|
52
53
|
"CHANGELOG.md",
|
|
53
54
|
"LICENSE"
|