@prodbeam/mcp 0.1.0

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.
Files changed (141) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/LICENSE +21 -0
  3. package/README.md +208 -0
  4. package/dist/CLAUDE.md +7 -0
  5. package/dist/adapters/github-mcp.d.ts +25 -0
  6. package/dist/adapters/github-mcp.d.ts.map +1 -0
  7. package/dist/adapters/github-mcp.js +307 -0
  8. package/dist/adapters/github-mcp.js.map +1 -0
  9. package/dist/adapters/jira-mcp.d.ts +14 -0
  10. package/dist/adapters/jira-mcp.d.ts.map +1 -0
  11. package/dist/adapters/jira-mcp.js +159 -0
  12. package/dist/adapters/jira-mcp.js.map +1 -0
  13. package/dist/cli.d.ts +3 -0
  14. package/dist/cli.d.ts.map +1 -0
  15. package/dist/cli.js +256 -0
  16. package/dist/cli.js.map +1 -0
  17. package/dist/clients/github-client.d.ts +29 -0
  18. package/dist/clients/github-client.d.ts.map +1 -0
  19. package/dist/clients/github-client.js +116 -0
  20. package/dist/clients/github-client.js.map +1 -0
  21. package/dist/clients/jira-client.d.ts +30 -0
  22. package/dist/clients/jira-client.d.ts.map +1 -0
  23. package/dist/clients/jira-client.js +115 -0
  24. package/dist/clients/jira-client.js.map +1 -0
  25. package/dist/clients/types.d.ts +155 -0
  26. package/dist/clients/types.d.ts.map +1 -0
  27. package/dist/clients/types.js +2 -0
  28. package/dist/clients/types.js.map +1 -0
  29. package/dist/commands/init.d.ts +2 -0
  30. package/dist/commands/init.d.ts.map +1 -0
  31. package/dist/commands/init.js +426 -0
  32. package/dist/commands/init.js.map +1 -0
  33. package/dist/commands/prompt.d.ts +18 -0
  34. package/dist/commands/prompt.d.ts.map +1 -0
  35. package/dist/commands/prompt.js +122 -0
  36. package/dist/commands/prompt.js.map +1 -0
  37. package/dist/config/credentials.d.ts +9 -0
  38. package/dist/config/credentials.d.ts.map +1 -0
  39. package/dist/config/credentials.js +87 -0
  40. package/dist/config/credentials.js.map +1 -0
  41. package/dist/config/paths.d.ts +6 -0
  42. package/dist/config/paths.d.ts.map +1 -0
  43. package/dist/config/paths.js +31 -0
  44. package/dist/config/paths.js.map +1 -0
  45. package/dist/config/team-config.d.ts +204 -0
  46. package/dist/config/team-config.d.ts.map +1 -0
  47. package/dist/config/team-config.js +86 -0
  48. package/dist/config/team-config.js.map +1 -0
  49. package/dist/config/thresholds.d.ts +15 -0
  50. package/dist/config/thresholds.d.ts.map +1 -0
  51. package/dist/config/thresholds.js +18 -0
  52. package/dist/config/thresholds.js.map +1 -0
  53. package/dist/config/types.d.ts +42 -0
  54. package/dist/config/types.d.ts.map +1 -0
  55. package/dist/config/types.js +2 -0
  56. package/dist/config/types.js.map +1 -0
  57. package/dist/discovery/github-discovery.d.ts +4 -0
  58. package/dist/discovery/github-discovery.d.ts.map +1 -0
  59. package/dist/discovery/github-discovery.js +46 -0
  60. package/dist/discovery/github-discovery.js.map +1 -0
  61. package/dist/discovery/jira-discovery.d.ts +4 -0
  62. package/dist/discovery/jira-discovery.d.ts.map +1 -0
  63. package/dist/discovery/jira-discovery.js +68 -0
  64. package/dist/discovery/jira-discovery.js.map +1 -0
  65. package/dist/discovery/types.d.ts +40 -0
  66. package/dist/discovery/types.d.ts.map +1 -0
  67. package/dist/discovery/types.js +2 -0
  68. package/dist/discovery/types.js.map +1 -0
  69. package/dist/generators/metrics-calculator.d.ts +5 -0
  70. package/dist/generators/metrics-calculator.d.ts.map +1 -0
  71. package/dist/generators/metrics-calculator.js +101 -0
  72. package/dist/generators/metrics-calculator.js.map +1 -0
  73. package/dist/generators/report-generator.d.ts +25 -0
  74. package/dist/generators/report-generator.d.ts.map +1 -0
  75. package/dist/generators/report-generator.js +375 -0
  76. package/dist/generators/report-generator.js.map +1 -0
  77. package/dist/generators/sprint-analyzer.d.ts +5 -0
  78. package/dist/generators/sprint-analyzer.d.ts.map +1 -0
  79. package/dist/generators/sprint-analyzer.js +88 -0
  80. package/dist/generators/sprint-analyzer.js.map +1 -0
  81. package/dist/history/history-store.d.ts +15 -0
  82. package/dist/history/history-store.d.ts.map +1 -0
  83. package/dist/history/history-store.js +197 -0
  84. package/dist/history/history-store.js.map +1 -0
  85. package/dist/history/snapshot-builder.d.ts +15 -0
  86. package/dist/history/snapshot-builder.d.ts.map +1 -0
  87. package/dist/history/snapshot-builder.js +45 -0
  88. package/dist/history/snapshot-builder.js.map +1 -0
  89. package/dist/history/types.d.ts +33 -0
  90. package/dist/history/types.d.ts.map +1 -0
  91. package/dist/history/types.js +2 -0
  92. package/dist/history/types.js.map +1 -0
  93. package/dist/index.d.ts +3 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +797 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/insights/anomaly-detector.d.ts +28 -0
  98. package/dist/insights/anomaly-detector.d.ts.map +1 -0
  99. package/dist/insights/anomaly-detector.js +154 -0
  100. package/dist/insights/anomaly-detector.js.map +1 -0
  101. package/dist/insights/team-health.d.ts +24 -0
  102. package/dist/insights/team-health.d.ts.map +1 -0
  103. package/dist/insights/team-health.js +151 -0
  104. package/dist/insights/team-health.js.map +1 -0
  105. package/dist/insights/trend-analyzer.d.ts +5 -0
  106. package/dist/insights/trend-analyzer.d.ts.map +1 -0
  107. package/dist/insights/trend-analyzer.js +79 -0
  108. package/dist/insights/trend-analyzer.js.map +1 -0
  109. package/dist/insights/types.d.ts +10 -0
  110. package/dist/insights/types.d.ts.map +1 -0
  111. package/dist/insights/types.js +2 -0
  112. package/dist/insights/types.js.map +1 -0
  113. package/dist/orchestrator/data-fetcher.d.ts +16 -0
  114. package/dist/orchestrator/data-fetcher.d.ts.map +1 -0
  115. package/dist/orchestrator/data-fetcher.js +169 -0
  116. package/dist/orchestrator/data-fetcher.js.map +1 -0
  117. package/dist/orchestrator/time-range.d.ts +8 -0
  118. package/dist/orchestrator/time-range.d.ts.map +1 -0
  119. package/dist/orchestrator/time-range.js +27 -0
  120. package/dist/orchestrator/time-range.js.map +1 -0
  121. package/dist/types/github.d.ts +40 -0
  122. package/dist/types/github.d.ts.map +1 -0
  123. package/dist/types/github.js +2 -0
  124. package/dist/types/github.js.map +1 -0
  125. package/dist/types/jira.d.ts +18 -0
  126. package/dist/types/jira.d.ts.map +1 -0
  127. package/dist/types/jira.js +2 -0
  128. package/dist/types/jira.js.map +1 -0
  129. package/dist/types/retrospective.d.ts +38 -0
  130. package/dist/types/retrospective.d.ts.map +1 -0
  131. package/dist/types/retrospective.js +2 -0
  132. package/dist/types/retrospective.js.map +1 -0
  133. package/dist/types/weekly.d.ts +41 -0
  134. package/dist/types/weekly.d.ts.map +1 -0
  135. package/dist/types/weekly.js +2 -0
  136. package/dist/types/weekly.js.map +1 -0
  137. package/dist/validators.d.ts +236 -0
  138. package/dist/validators.d.ts.map +1 -0
  139. package/dist/validators.js +62 -0
  140. package/dist/validators.js.map +1 -0
  141. package/package.json +72 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,31 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [0.1.0] - 2026-02-08
9
+
10
+ ### Added
11
+
12
+ - **MCP Server** — stdio-based server compatible with Claude Code, Cursor, Windsurf, and any MCP client
13
+ - **GitHub integration** — direct REST API client with typed responses, rate limiting, and retry logic
14
+ - **Jira integration** — direct REST API client for Cloud instances with basic auth
15
+ - **Daily standup** (`standup`) — personal activity report from the last 24 hours
16
+ - **Team standup** (`team_standup`) — per-member breakdown with aggregate metrics
17
+ - **Weekly summary** (`weekly_summary`) — 7-day engineering summary with repo breakdown and team health scoring
18
+ - **Sprint retrospective** (`sprint_retro`) — sprint-bounded report with merge rate, review coverage, and insights
19
+ - **Team setup** (`setup_team`) — one-time onboarding with auto-discovery of GitHub usernames, repos, Jira accounts, and projects
20
+ - **Team management** — `add_member`, `remove_member`, `refresh_config` tools
21
+ - **Interactive CLI** — `prodbeam init` setup wizard with credential validation and MCP server registration
22
+ - **CLI reports** — `prodbeam standup`, `team-standup`, `weekly`, `sprint-retro`, `status` commands
23
+ - **Intelligence layer** — anomaly detection, team health scoring (velocity, throughput, review coverage, issue flow), trend analysis
24
+ - **History store** — SQLite-backed metrics persistence for trend comparison across reports
25
+ - **Credential resolution** — two-tier system (environment variables > `~/.prodbeam/credentials.json`) with 600 file permissions
26
+ - **Auto-discovery** — resolves GitHub usernames/repos and Jira accounts/projects from email addresses
27
+ - **Stale PR detection** — configurable thresholds for warning and alert levels
28
+ - **CI/CD** — GitHub Actions for build/test (Node 18/20/22), security scanning (npm audit, Gitleaks, CodeQL, license check), conventional commits, and PR size labeling
29
+ - **213 tests** across 18 test suites
30
+
31
+ [0.1.0]: https://github.com/prodbeam/prodbeam-mcp/releases/tag/v0.1.0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Prodbeam
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,208 @@
1
+ # Prodbeam MCP Server
2
+
3
+ Engineering intelligence reports from GitHub and Jira, delivered through any MCP client or the standalone CLI.
4
+
5
+ - **Daily standups** from your commits, PRs, reviews, and Jira issues
6
+ - **Weekly summaries** with team metrics, repo breakdowns, and insights
7
+ - **Sprint retrospectives** with merge time analysis and completion rates
8
+ - **Team health scoring** with anomaly detection and trend analysis
9
+
10
+ ---
11
+
12
+ ## Quick Start
13
+
14
+ ### Option 1: npx (zero install)
15
+
16
+ ```bash
17
+ claude mcp add prodbeam \
18
+ -e GITHUB_TOKEN=ghp_YOUR_TOKEN \
19
+ -e JIRA_HOST=company.atlassian.net \
20
+ -e JIRA_EMAIL=you@company.com \
21
+ -e JIRA_API_TOKEN=your_jira_token \
22
+ -- npx -y @prodbeam/mcp
23
+ ```
24
+
25
+ Then set up your team in a Claude Code session:
26
+
27
+ ```
28
+ Set up my prodbeam team called "My Team" with emails: alice@company.com, bob@company.com
29
+ ```
30
+
31
+ ### Option 2: Global install with setup wizard
32
+
33
+ ```bash
34
+ npm install -g @prodbeam/mcp
35
+ prodbeam init
36
+ ```
37
+
38
+ The wizard detects credentials, validates them, discovers your repos and projects, and registers the MCP server automatically.
39
+
40
+ ### Option 3: MCP client config file
41
+
42
+ For Cursor, Windsurf, or other MCP clients that use a JSON config:
43
+
44
+ ```json
45
+ {
46
+ "mcpServers": {
47
+ "prodbeam": {
48
+ "command": "npx",
49
+ "args": ["-y", "@prodbeam/mcp"],
50
+ "env": {
51
+ "GITHUB_TOKEN": "ghp_YOUR_TOKEN",
52
+ "JIRA_HOST": "company.atlassian.net",
53
+ "JIRA_EMAIL": "you@company.com",
54
+ "JIRA_API_TOKEN": "your_jira_token"
55
+ }
56
+ }
57
+ }
58
+ }
59
+ ```
60
+
61
+ ---
62
+
63
+ ## Prerequisites
64
+
65
+ | Requirement | How to get it |
66
+ |-------------|---------------|
67
+ | Node.js 18+ | [nodejs.org](https://nodejs.org) |
68
+ | GitHub PAT | [Create token](https://github.com/settings/tokens) — scopes: `repo`, `read:user`, `read:org` |
69
+ | Jira API Token | [Create token](https://id.atlassian.com/manage-profile/security/api-tokens) |
70
+
71
+ ---
72
+
73
+ ## Usage
74
+
75
+ ### In any MCP client
76
+
77
+ Ask naturally — the client invokes the right tool:
78
+
79
+ | Prompt | Tool |
80
+ |--------|------|
81
+ | "Generate my standup" | `standup` |
82
+ | "Generate a team standup" | `team_standup` |
83
+ | "Generate a weekly summary" | `weekly_summary` |
84
+ | "Generate a weekly summary for last week" | `weekly_summary` (weeksAgo: 1) |
85
+ | "Generate a sprint retro" | `sprint_retro` |
86
+
87
+ ### CLI
88
+
89
+ ```bash
90
+ prodbeam status # Check config and credentials
91
+ prodbeam standup # Personal standup (last 24h)
92
+ prodbeam standup --email alice@co.com # Standup for a specific member
93
+ prodbeam team-standup # Full team standup
94
+ prodbeam weekly # Weekly summary
95
+ prodbeam weekly --weeks-ago 1 # Last week's summary
96
+ prodbeam sprint-retro # Sprint retro (auto-detect sprint)
97
+ prodbeam sprint-retro --sprint "Sprint 12" # Specific sprint
98
+ ```
99
+
100
+ ---
101
+
102
+ ## Available Tools
103
+
104
+ ### Setup
105
+
106
+ | Tool | Parameters | Description |
107
+ |------|-----------|-------------|
108
+ | `setup_team` | teamName, emails | One-time onboarding with auto-discovery |
109
+ | `add_member` | email | Add a team member |
110
+ | `remove_member` | email | Remove a team member |
111
+ | `refresh_config` | — | Re-scan repos and sprints |
112
+ | `get_capabilities` | — | Show config status and available tools |
113
+
114
+ ### Reports
115
+
116
+ | Tool | Parameters | Description |
117
+ |------|-----------|-------------|
118
+ | `standup` | email (optional) | Personal daily standup (last 24h) |
119
+ | `team_standup` | — | Full team standup with per-member breakdown |
120
+ | `weekly_summary` | weeksAgo (optional) | Weekly engineering summary with metrics |
121
+ | `sprint_retro` | sprintName (optional) | Sprint retrospective with completion rates |
122
+
123
+ ---
124
+
125
+ ## Architecture
126
+
127
+ Prodbeam is **self-sufficient** — it fetches data directly from GitHub and Jira APIs. No separate MCP servers or API keys needed.
128
+
129
+ ```
130
+ MCP Client (Claude Code, Cursor, Windsurf, etc.)
131
+ └── Prodbeam MCP Server (stdio)
132
+ ├── GitHub REST API (your token)
133
+ ├── Jira REST API (your token)
134
+ └── ~/.prodbeam/history.db (local SQLite)
135
+ ```
136
+
137
+ **One tool call = one complete report.** No multi-step orchestration.
138
+
139
+ ### Config directory
140
+
141
+ All data lives in `~/.prodbeam/`:
142
+
143
+ | File | Purpose |
144
+ |------|---------|
145
+ | `team.json` | Team members, repos, Jira projects |
146
+ | `credentials.json` | API tokens (600 permissions) |
147
+ | `history.db` | SQLite metrics for trend comparison |
148
+
149
+ Override location with `PRODBEAM_HOME` env var.
150
+
151
+ ---
152
+
153
+ ## Development
154
+
155
+ ```bash
156
+ git clone https://github.com/prodbeam/prodbeam-mcp.git
157
+ cd prodbeam-mcp
158
+ npm install
159
+ npm run build
160
+ npm test
161
+ ```
162
+
163
+ ### Project Structure
164
+
165
+ ```
166
+ src/
167
+ ├── index.ts # MCP server entry point
168
+ ├── cli.ts # Standalone CLI
169
+ ├── clients/ # GitHub and Jira REST API clients
170
+ ├── commands/ # CLI commands (init wizard)
171
+ ├── config/ # Credentials, team config, paths
172
+ ├── discovery/ # GitHub/Jira auto-discovery
173
+ ├── generators/ # Report generation
174
+ ├── history/ # SQLite metrics persistence
175
+ ├── insights/ # Anomaly detection, team health, trends
176
+ ├── orchestrator/ # Data fetching and time ranges
177
+ └── validators.ts # Input validation
178
+ ```
179
+
180
+ ### Commands
181
+
182
+ ```bash
183
+ npm run build # Compile TypeScript
184
+ npm run dev # Watch mode
185
+ npm test # Run tests (vitest)
186
+ npm run lint # Lint (eslint)
187
+ npm run type-check # Type check (tsc --noEmit)
188
+ ```
189
+
190
+ ---
191
+
192
+ ## Documentation
193
+
194
+ See [docs/prodbeam-mcp-guide.md](docs/prodbeam-mcp-guide.md) for the full setup and usage guide.
195
+
196
+ ---
197
+
198
+ ## Contributing
199
+
200
+ Bug reports and feature requests welcome via [GitHub Issues](https://github.com/prodbeam/prodbeam-mcp/issues).
201
+
202
+ Pull requests accepted — please follow conventional commit format (`feat:`, `fix:`, `docs:`, etc.).
203
+
204
+ ---
205
+
206
+ ## License
207
+
208
+ MIT — See [LICENSE](LICENSE).
package/dist/CLAUDE.md ADDED
@@ -0,0 +1,7 @@
1
+ <claude-mem-context>
2
+ # Recent Activity
3
+
4
+ <!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
5
+
6
+ *No recent activity*
7
+ </claude-mem-context>
@@ -0,0 +1,25 @@
1
+ import type { GitHubActivity } from '../types/github.js';
2
+ export declare class GitHubMCPAdapter {
3
+ private client;
4
+ private connected;
5
+ private username;
6
+ static isConfigured(): boolean;
7
+ connect(): Promise<void>;
8
+ disconnect(): Promise<void>;
9
+ getCurrentUser(): Promise<string>;
10
+ fetchActivity(hours?: number): Promise<GitHubActivity>;
11
+ isAvailable(): Promise<boolean>;
12
+ private ensureConnected;
13
+ private callTool;
14
+ private extractText;
15
+ private fetchAuthoredPullRequests;
16
+ private fetchReviewedPullRequests;
17
+ private fetchCommitsFromRepos;
18
+ private extractUniqueRepos;
19
+ private convertToReviews;
20
+ private parseCommits;
21
+ private extractCommitFromObject;
22
+ private parsePullRequests;
23
+ private extractPRFromObject;
24
+ }
25
+ //# sourceMappingURL=github-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-mcp.d.ts","sourceRoot":"","sources":["../../src/adapters/github-mcp.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,cAAc,EAKf,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAM;IAKtB,MAAM,CAAC,YAAY,IAAI,OAAO;IAOxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IA4BjC,aAAa,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,cAAc,CAAC;IAoClD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAYrC,OAAO,CAAC,eAAe;YAMT,QAAQ;IAMtB,OAAO,CAAC,WAAW;YAaL,yBAAyB;YAsBzB,yBAAyB;YAsBzB,qBAAqB;IAkCnC,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,YAAY;IAyCpB,OAAO,CAAC,uBAAuB;IAuB/B,OAAO,CAAC,iBAAiB;IA4CzB,OAAO,CAAC,mBAAmB;CAgC5B"}
@@ -0,0 +1,307 @@
1
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
3
+ export class GitHubMCPAdapter {
4
+ client = null;
5
+ connected = false;
6
+ username = '';
7
+ static isConfigured() {
8
+ return Boolean(process.env['GITHUB_PERSONAL_ACCESS_TOKEN']);
9
+ }
10
+ async connect() {
11
+ if (this.connected) {
12
+ return;
13
+ }
14
+ const token = process.env['GITHUB_PERSONAL_ACCESS_TOKEN'];
15
+ if (!token) {
16
+ throw new Error('GITHUB_PERSONAL_ACCESS_TOKEN is not set. ' +
17
+ 'Add it to your .claude/mcp.json under the prodbeam server env vars.');
18
+ }
19
+ try {
20
+ this.client = new Client({ name: 'prodbeam-github-adapter', version: '0.1.0' }, { capabilities: {} });
21
+ const transport = new StdioClientTransport({
22
+ command: 'npx',
23
+ args: ['-y', '@modelcontextprotocol/server-github'],
24
+ env: {
25
+ ...process.env,
26
+ GITHUB_PERSONAL_ACCESS_TOKEN: token,
27
+ },
28
+ });
29
+ await this.client.connect(transport);
30
+ this.connected = true;
31
+ console.error('[prodbeam] Connected to GitHub MCP server');
32
+ }
33
+ catch (error) {
34
+ const message = error instanceof Error ? error.message : 'Unknown error';
35
+ throw new Error(`Failed to connect to GitHub MCP: ${message}`);
36
+ }
37
+ }
38
+ async disconnect() {
39
+ if (this.client) {
40
+ try {
41
+ await this.client.close();
42
+ }
43
+ catch {
44
+ }
45
+ this.client = null;
46
+ this.connected = false;
47
+ }
48
+ }
49
+ async getCurrentUser() {
50
+ if (this.username) {
51
+ return this.username;
52
+ }
53
+ const result = await this.callTool('get_me', {});
54
+ const text = this.extractText(result);
55
+ const loginMatch = text.match(/"login"\s*:\s*"([^"]+)"/);
56
+ if (loginMatch?.[1]) {
57
+ this.username = loginMatch[1];
58
+ return this.username;
59
+ }
60
+ const usernameMatch = text.match(/Username:\s*(\S+)/i) ?? text.match(/login:\s*(\S+)/i);
61
+ if (usernameMatch?.[1]) {
62
+ this.username = usernameMatch[1];
63
+ return this.username;
64
+ }
65
+ throw new Error('Could not determine GitHub username from get_me response');
66
+ }
67
+ async fetchActivity(hours = 24) {
68
+ this.ensureConnected();
69
+ const now = new Date();
70
+ const from = new Date(now.getTime() - hours * 60 * 60 * 1000);
71
+ const username = await this.getCurrentUser();
72
+ const sinceDate = from.toISOString().split('T')[0] ?? '';
73
+ const [authoredPRs, reviewedPRs] = await Promise.all([
74
+ this.fetchAuthoredPullRequests(username, sinceDate),
75
+ this.fetchReviewedPullRequests(username, sinceDate),
76
+ ]);
77
+ const repos = this.extractUniqueRepos([...authoredPRs, ...reviewedPRs]);
78
+ const commits = await this.fetchCommitsFromRepos(repos, username, from);
79
+ const reviews = this.convertToReviews(reviewedPRs, username);
80
+ return {
81
+ username,
82
+ commits,
83
+ pullRequests: authoredPRs,
84
+ reviews,
85
+ timeRange: {
86
+ from: from.toISOString(),
87
+ to: now.toISOString(),
88
+ },
89
+ };
90
+ }
91
+ async isAvailable() {
92
+ try {
93
+ await this.connect();
94
+ await this.getCurrentUser();
95
+ return true;
96
+ }
97
+ catch {
98
+ return false;
99
+ }
100
+ }
101
+ ensureConnected() {
102
+ if (!this.connected || !this.client) {
103
+ throw new Error('Not connected to GitHub MCP. Call connect() first.');
104
+ }
105
+ }
106
+ async callTool(name, args) {
107
+ this.ensureConnected();
108
+ const result = await this.client.callTool({ name, arguments: args });
109
+ return result;
110
+ }
111
+ extractText(response) {
112
+ if (!response.content || response.content.length === 0) {
113
+ return '';
114
+ }
115
+ return response.content
116
+ .filter((c) => c.type === 'text' && c.text)
117
+ .map((c) => c.text ?? '')
118
+ .join('\n');
119
+ }
120
+ async fetchAuthoredPullRequests(username, sinceDate) {
121
+ try {
122
+ const result = await this.callTool('search_pull_requests', {
123
+ q: `author:${username} updated:>=${sinceDate}`,
124
+ sort: 'updated',
125
+ order: 'desc',
126
+ perPage: 20,
127
+ });
128
+ return this.parsePullRequests(result);
129
+ }
130
+ catch (error) {
131
+ console.error('[prodbeam] Error fetching authored PRs:', error);
132
+ return [];
133
+ }
134
+ }
135
+ async fetchReviewedPullRequests(username, sinceDate) {
136
+ try {
137
+ const result = await this.callTool('search_pull_requests', {
138
+ q: `reviewed-by:${username} -author:${username} updated:>=${sinceDate}`,
139
+ sort: 'updated',
140
+ order: 'desc',
141
+ perPage: 20,
142
+ });
143
+ return this.parsePullRequests(result);
144
+ }
145
+ catch (error) {
146
+ console.error('[prodbeam] Error fetching reviewed PRs:', error);
147
+ return [];
148
+ }
149
+ }
150
+ async fetchCommitsFromRepos(repos, username, since) {
151
+ const allCommits = [];
152
+ for (const repo of repos.slice(0, 5)) {
153
+ try {
154
+ const [owner, name] = repo.split('/');
155
+ if (!owner || !name)
156
+ continue;
157
+ const result = await this.callTool('list_commits', {
158
+ owner,
159
+ repo: name,
160
+ author: username,
161
+ since: since.toISOString(),
162
+ perPage: 20,
163
+ });
164
+ const commits = this.parseCommits(result, repo);
165
+ allCommits.push(...commits);
166
+ }
167
+ catch (error) {
168
+ console.error(`[prodbeam] Error fetching commits for ${repo}:`, error);
169
+ }
170
+ }
171
+ return allCommits;
172
+ }
173
+ extractUniqueRepos(prs) {
174
+ const repos = new Set();
175
+ for (const pr of prs) {
176
+ if (pr.repo) {
177
+ repos.add(pr.repo);
178
+ }
179
+ }
180
+ return Array.from(repos);
181
+ }
182
+ convertToReviews(reviewedPRs, _username) {
183
+ return reviewedPRs.map((pr) => ({
184
+ pullRequestNumber: pr.number,
185
+ pullRequestTitle: pr.title,
186
+ author: pr.author,
187
+ state: 'COMMENTED',
188
+ submittedAt: pr.updatedAt,
189
+ repo: pr.repo,
190
+ }));
191
+ }
192
+ parseCommits(response, repo) {
193
+ const text = this.extractText(response);
194
+ if (!text)
195
+ return [];
196
+ const commits = [];
197
+ try {
198
+ const data = JSON.parse(text);
199
+ if (Array.isArray(data)) {
200
+ for (const item of data) {
201
+ const commit = this.extractCommitFromObject(item, repo);
202
+ if (commit)
203
+ commits.push(commit);
204
+ }
205
+ return commits;
206
+ }
207
+ }
208
+ catch {
209
+ }
210
+ const lines = text.split('\n');
211
+ for (const line of lines) {
212
+ const shaMatch = line.match(/[`]?([a-f0-9]{7,40})[`]?\s*[-:]\s*(.+)/i);
213
+ if (shaMatch?.[1] && shaMatch[2]) {
214
+ commits.push({
215
+ sha: shaMatch[1],
216
+ message: shaMatch[2].trim().replace(/\s*\(.*\)\s*$/, ''),
217
+ author: '',
218
+ date: '',
219
+ repo,
220
+ url: '',
221
+ });
222
+ }
223
+ }
224
+ return commits;
225
+ }
226
+ extractCommitFromObject(obj, repo) {
227
+ const sha = obj['sha'] ?? '';
228
+ const commit = obj['commit'];
229
+ const message = commit?.['message'] ?? obj['message'] ?? '';
230
+ if (!sha && !message)
231
+ return null;
232
+ const author = commit?.['author']?.['name'] ??
233
+ obj['author']?.['login'] ??
234
+ '';
235
+ const date = commit?.['author']?.['date'] ??
236
+ obj['date'] ??
237
+ '';
238
+ const url = obj['html_url'] ?? '';
239
+ return { sha: sha.slice(0, 7), message: message.split('\n')[0] ?? '', author, date, repo, url };
240
+ }
241
+ parsePullRequests(response) {
242
+ const text = this.extractText(response);
243
+ if (!text)
244
+ return [];
245
+ const prs = [];
246
+ try {
247
+ const data = JSON.parse(text);
248
+ const items = Array.isArray(data)
249
+ ? data
250
+ : (data['items'] ?? []);
251
+ for (const item of items) {
252
+ const pr = this.extractPRFromObject(item);
253
+ if (pr)
254
+ prs.push(pr);
255
+ }
256
+ return prs;
257
+ }
258
+ catch {
259
+ }
260
+ const lines = text.split('\n');
261
+ for (const line of lines) {
262
+ const prMatch = line.match(/#(\d+)\s*[-:]\s*(.+?)(?:\s*\[(open|closed|merged)\])?/i);
263
+ if (prMatch?.[1] && prMatch[2]) {
264
+ const repoMatch = line.match(/(?:in|repo[:\s]+)\s*(\S+\/\S+)/i);
265
+ prs.push({
266
+ number: parseInt(prMatch[1], 10),
267
+ title: prMatch[2].trim(),
268
+ state: prMatch[3]?.toLowerCase() ?? 'open',
269
+ author: '',
270
+ createdAt: '',
271
+ updatedAt: '',
272
+ repo: repoMatch?.[1] ?? '',
273
+ url: '',
274
+ });
275
+ }
276
+ }
277
+ return prs;
278
+ }
279
+ extractPRFromObject(obj) {
280
+ const number = obj['number'];
281
+ const title = obj['title'];
282
+ if (!number && !title)
283
+ return null;
284
+ const repoUrl = obj['repository_url'] ?? obj['html_url'] ?? '';
285
+ const repoMatch = repoUrl.match(/repos\/(.+\/.+?)(?:\/|$)/) ?? repoUrl.match(/github\.com\/(.+?\/.+?)(?:\/|$)/);
286
+ let state = obj['state']?.toLowerCase() ?? 'open';
287
+ const mergedAt = obj['merged_at'] ??
288
+ obj['pull_request']?.['merged_at'];
289
+ if (mergedAt) {
290
+ state = 'merged';
291
+ }
292
+ return {
293
+ number: number ?? 0,
294
+ title: title ?? '',
295
+ state,
296
+ author: obj['user']?.['login'] ?? '',
297
+ createdAt: obj['created_at'] ?? '',
298
+ updatedAt: obj['updated_at'] ?? '',
299
+ mergedAt: obj['merged_at'] ?? undefined,
300
+ repo: repoMatch?.[1] ?? '',
301
+ url: obj['html_url'] ?? '',
302
+ additions: obj['additions'],
303
+ deletions: obj['deletions'],
304
+ };
305
+ }
306
+ }
307
+ //# sourceMappingURL=github-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-mcp.js","sourceRoot":"","sources":["../../src/adapters/github-mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { JiraActivity } from '../types/jira.js';
2
+ export declare class JiraMCPAdapter {
3
+ private client;
4
+ private connected;
5
+ static isConfigured(): boolean;
6
+ connect(): Promise<void>;
7
+ disconnect(): Promise<void>;
8
+ fetchActivity(hours?: number): Promise<JiraActivity>;
9
+ isAvailable(): Promise<boolean>;
10
+ private extractText;
11
+ private parseIssues;
12
+ private extractIssueFromObject;
13
+ }
14
+ //# sourceMappingURL=jira-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira-mcp.d.ts","sourceRoot":"","sources":["../../src/adapters/jira-mcp.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,kBAAkB,CAAC;AAGhE,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAS;IAK1B,MAAM,CAAC,YAAY,IAAI,OAAO;IASxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA4CxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B,aAAa,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,YAAY,CAAC;IAyChD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAWrC,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,WAAW;IA4CnB,OAAO,CAAC,sBAAsB;CAmB/B"}