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 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
  [![standup-mr MCP server](https://glama.ai/mcp/servers/Jubstaaa/standup-mr/badges/score.svg)](https://glama.ai/mcp/servers/Jubstaaa/standup-mr)
4
+ [![Listed on mcpservers.org](https://mcpservers.org/badge.svg)](https://mcpservers.org/servers/jubstaaa/standup-mr)
4
5
 
5
6
  Standup notes from **merge request state**, not commit logs.
6
7
 
@@ -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; GitLab has no default, so self-hosted GitLab needs this or GITLAB_HOST."
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. Defaults to en. Only the labels change \u2014 the standup note itself is written by the caller."
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
- "Collect merge-request-based standup data from GitLab or GitHub. Returns the previous working day activity, open merge requests or pull requests bucketed by state (ready / blocked / draft / stale), pending reviews, and the error lines from any failed pipeline or check. Credentials come from the environment or a logged-in gh / glab session, never from an argument.",
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,
@@ -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.0",
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"