@ldraney/github-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 (70) hide show
  1. package/README.md +131 -0
  2. package/dist/auth/local-server.d.ts +16 -0
  3. package/dist/auth/local-server.js +146 -0
  4. package/dist/auth/oauth-device-flow.d.ts +20 -0
  5. package/dist/auth/oauth-device-flow.d.ts.map +1 -0
  6. package/dist/auth/oauth-device-flow.js +141 -0
  7. package/dist/auth/oauth-device-flow.js.map +1 -0
  8. package/dist/auth/oauth-flow.d.ts +20 -0
  9. package/dist/auth/oauth-flow.js +95 -0
  10. package/dist/auth/token-storage.d.ts +16 -0
  11. package/dist/auth/token-storage.d.ts.map +1 -0
  12. package/dist/auth/token-storage.js +33 -0
  13. package/dist/auth/token-storage.js.map +1 -0
  14. package/dist/index.d.ts +2 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +85 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/resources/webhooks.d.ts +15 -0
  19. package/dist/resources/webhooks.d.ts.map +1 -0
  20. package/dist/resources/webhooks.js +194 -0
  21. package/dist/resources/webhooks.js.map +1 -0
  22. package/dist/server.d.ts +4 -0
  23. package/dist/server.d.ts.map +1 -0
  24. package/dist/server.js +247 -0
  25. package/dist/server.js.map +1 -0
  26. package/dist/tools/categories/actions.d.ts +5 -0
  27. package/dist/tools/categories/actions.d.ts.map +1 -0
  28. package/dist/tools/categories/actions.js +395 -0
  29. package/dist/tools/categories/actions.js.map +1 -0
  30. package/dist/tools/categories/gists.d.ts +5 -0
  31. package/dist/tools/categories/gists.d.ts.map +1 -0
  32. package/dist/tools/categories/gists.js +315 -0
  33. package/dist/tools/categories/gists.js.map +1 -0
  34. package/dist/tools/categories/issues.d.ts +5 -0
  35. package/dist/tools/categories/issues.d.ts.map +1 -0
  36. package/dist/tools/categories/issues.js +425 -0
  37. package/dist/tools/categories/issues.js.map +1 -0
  38. package/dist/tools/categories/orgs.d.ts +5 -0
  39. package/dist/tools/categories/orgs.d.ts.map +1 -0
  40. package/dist/tools/categories/orgs.js +452 -0
  41. package/dist/tools/categories/orgs.js.map +1 -0
  42. package/dist/tools/categories/pulls.d.ts +5 -0
  43. package/dist/tools/categories/pulls.d.ts.map +1 -0
  44. package/dist/tools/categories/pulls.js +370 -0
  45. package/dist/tools/categories/pulls.js.map +1 -0
  46. package/dist/tools/categories/repos.d.ts +5 -0
  47. package/dist/tools/categories/repos.d.ts.map +1 -0
  48. package/dist/tools/categories/repos.js +392 -0
  49. package/dist/tools/categories/repos.js.map +1 -0
  50. package/dist/tools/categories/search.d.ts +5 -0
  51. package/dist/tools/categories/search.d.ts.map +1 -0
  52. package/dist/tools/categories/search.js +217 -0
  53. package/dist/tools/categories/search.js.map +1 -0
  54. package/dist/tools/categories/users.d.ts +5 -0
  55. package/dist/tools/categories/users.d.ts.map +1 -0
  56. package/dist/tools/categories/users.js +247 -0
  57. package/dist/tools/categories/users.js.map +1 -0
  58. package/dist/tools/generator.d.ts +19 -0
  59. package/dist/tools/generator.d.ts.map +1 -0
  60. package/dist/tools/generator.js +69 -0
  61. package/dist/tools/generator.js.map +1 -0
  62. package/dist/webhooks/event-queue.d.ts +54 -0
  63. package/dist/webhooks/event-queue.d.ts.map +1 -0
  64. package/dist/webhooks/event-queue.js +117 -0
  65. package/dist/webhooks/event-queue.js.map +1 -0
  66. package/dist/webhooks/smee-client.d.ts +27 -0
  67. package/dist/webhooks/smee-client.d.ts.map +1 -0
  68. package/dist/webhooks/smee-client.js +153 -0
  69. package/dist/webhooks/smee-client.js.map +1 -0
  70. package/package.json +53 -0
package/dist/index.js ADDED
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { getToken, login, logout, getAuthStatus } from './auth/oauth-flow.js';
4
+ import { startServer } from './server.js';
5
+ const program = new Command();
6
+ program
7
+ .name('github-mcp')
8
+ .description('GitHub MCP server with OAuth authentication')
9
+ .version('0.1.0');
10
+ // Default command: start server
11
+ program
12
+ .action(async () => {
13
+ try {
14
+ let token = await getToken();
15
+ if (!token) {
16
+ console.log('No token found. Starting authentication flow...');
17
+ token = await login();
18
+ }
19
+ if (!token) {
20
+ console.error('Authentication failed. Cannot start server.');
21
+ process.exit(1);
22
+ }
23
+ await startServer(token);
24
+ }
25
+ catch (error) {
26
+ console.error('Error:', error instanceof Error ? error.message : error);
27
+ process.exit(1);
28
+ }
29
+ });
30
+ // Auth subcommands
31
+ const authCommand = program
32
+ .command('auth')
33
+ .description('Manage GitHub authentication');
34
+ authCommand
35
+ .command('login')
36
+ .description('Authenticate with GitHub')
37
+ .action(async () => {
38
+ try {
39
+ const token = await login();
40
+ if (token) {
41
+ console.log('Successfully authenticated!');
42
+ }
43
+ else {
44
+ console.error('Authentication failed.');
45
+ process.exit(1);
46
+ }
47
+ }
48
+ catch (error) {
49
+ console.error('Error:', error instanceof Error ? error.message : error);
50
+ process.exit(1);
51
+ }
52
+ });
53
+ authCommand
54
+ .command('logout')
55
+ .description('Remove stored authentication')
56
+ .action(async () => {
57
+ try {
58
+ await logout();
59
+ console.log('Logged out successfully.');
60
+ }
61
+ catch (error) {
62
+ console.error('Error:', error instanceof Error ? error.message : error);
63
+ process.exit(1);
64
+ }
65
+ });
66
+ authCommand
67
+ .command('status')
68
+ .description('Check authentication status')
69
+ .action(async () => {
70
+ try {
71
+ const status = await getAuthStatus();
72
+ if (status.authenticated) {
73
+ console.log(`Authenticated as: ${status.username}`);
74
+ console.log(`Scopes: ${status.scopes?.join(', ') || 'unknown'}`);
75
+ }
76
+ else {
77
+ console.log('Not authenticated.');
78
+ }
79
+ }
80
+ catch (error) {
81
+ console.error('Error:', error instanceof Error ? error.message : error);
82
+ process.exit(1);
83
+ }
84
+ });
85
+ program.parse();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE3E,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,qEAAqE,CAAC;KAClF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KACrC,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,kBAAkB,EAAE,4BAA4B,CAAC;KACxD,MAAM,CAAC,qBAAqB,EAAE,mDAAmD,CAAC;KAClF,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,yBAAyB,CAAC;KACtC,UAAU,CACT,IAAI,OAAO,CAAC,OAAO,CAAC;KACjB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,KAAK,EAAE,CAAC;AAChB,CAAC,CAAC,CACL;KACA,UAAU,CACT,IAAI,OAAO,CAAC,QAAQ,CAAC;KAClB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,EAAE,CAAC;AACjB,CAAC,CAAC,CACL;KACA,UAAU,CACT,IAAI,OAAO,CAAC,QAAQ,CAAC;KAClB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,aAAa,EAAE,CAAC;AACxB,CAAC,CAAC,CACL,CAAC;AAEJ,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Resource } from '@modelcontextprotocol/sdk/types.js';
2
+ export interface WebhookResourceContents {
3
+ uri: string;
4
+ mimeType: string;
5
+ text: string;
6
+ }
7
+ /**
8
+ * Get all webhook-related resources
9
+ */
10
+ export declare function getWebhookResources(): Resource[];
11
+ /**
12
+ * Read a webhook resource
13
+ */
14
+ export declare function readWebhookResource(uri: string): WebhookResourceContents;
15
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/resources/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAG9D,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAGD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,QAAQ,EAAE,CA4ChD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,CAiExE"}
@@ -0,0 +1,194 @@
1
+ import { eventQueue } from '../webhooks/event-queue.js';
2
+ import { getSmeeUrl } from '../webhooks/smee-client.js';
3
+ /**
4
+ * Get all webhook-related resources
5
+ */
6
+ export function getWebhookResources() {
7
+ const resources = [];
8
+ // Status resource
9
+ resources.push({
10
+ uri: 'github://webhooks/status',
11
+ name: 'Webhook Status',
12
+ description: 'Current webhook listener status and event counts',
13
+ mimeType: 'application/json',
14
+ });
15
+ // All events resource
16
+ resources.push({
17
+ uri: 'github://webhooks/all',
18
+ name: 'All Events',
19
+ description: 'All recent webhook events',
20
+ mimeType: 'application/json',
21
+ });
22
+ // Per-type resources for active types
23
+ const activeTypes = eventQueue.getEventTypes();
24
+ for (const type of activeTypes) {
25
+ resources.push({
26
+ uri: `github://webhooks/events/${type}`,
27
+ name: `${formatEventType(type)} Events`,
28
+ description: `Recent ${type} webhook events`,
29
+ mimeType: 'application/json',
30
+ });
31
+ }
32
+ // Common types (even if not yet received)
33
+ const commonTypes = ['push', 'pull_request', 'issues', 'issue_comment', 'release', 'workflow_run', 'check_run'];
34
+ for (const type of commonTypes) {
35
+ if (!activeTypes.includes(type)) {
36
+ resources.push({
37
+ uri: `github://webhooks/events/${type}`,
38
+ name: `${formatEventType(type)} Events`,
39
+ description: `Recent ${type} webhook events (waiting for events)`,
40
+ mimeType: 'application/json',
41
+ });
42
+ }
43
+ }
44
+ return resources;
45
+ }
46
+ /**
47
+ * Read a webhook resource
48
+ */
49
+ export function readWebhookResource(uri) {
50
+ // Status resource
51
+ if (uri === 'github://webhooks/status') {
52
+ const status = {
53
+ connected: getSmeeUrl() !== null,
54
+ smeeUrl: getSmeeUrl(),
55
+ eventCounts: eventQueue.getCounts(),
56
+ totalEvents: eventQueue.getAll().length,
57
+ activeEventTypes: eventQueue.getEventTypes(),
58
+ };
59
+ return {
60
+ uri,
61
+ mimeType: 'application/json',
62
+ text: JSON.stringify(status, null, 2),
63
+ };
64
+ }
65
+ // All events resource
66
+ if (uri === 'github://webhooks/all') {
67
+ const events = eventQueue.getAll(100);
68
+ return {
69
+ uri,
70
+ mimeType: 'application/json',
71
+ text: JSON.stringify(formatEvents(events), null, 2),
72
+ };
73
+ }
74
+ // Type-specific resource
75
+ const typeMatch = uri.match(/^github:\/\/webhooks\/events\/(.+)$/);
76
+ if (typeMatch) {
77
+ const type = typeMatch[1];
78
+ const events = eventQueue.getByType(type, 100);
79
+ return {
80
+ uri,
81
+ mimeType: 'application/json',
82
+ text: JSON.stringify(formatEvents(events), null, 2),
83
+ };
84
+ }
85
+ // Legacy format support
86
+ const legacyMatch = uri.match(/^github:\/\/webhooks\/(.+)$/);
87
+ if (legacyMatch && legacyMatch[1] !== 'status') {
88
+ const type = legacyMatch[1];
89
+ if (type === 'all') {
90
+ const events = eventQueue.getAll(100);
91
+ return {
92
+ uri,
93
+ mimeType: 'application/json',
94
+ text: JSON.stringify(formatEvents(events), null, 2),
95
+ };
96
+ }
97
+ const events = eventQueue.getByType(type, 100);
98
+ return {
99
+ uri,
100
+ mimeType: 'application/json',
101
+ text: JSON.stringify(formatEvents(events), null, 2),
102
+ };
103
+ }
104
+ return {
105
+ uri,
106
+ mimeType: 'application/json',
107
+ text: JSON.stringify({ error: 'Unknown resource' }),
108
+ };
109
+ }
110
+ /**
111
+ * Format events for output
112
+ */
113
+ function formatEvents(events) {
114
+ return {
115
+ count: events.length,
116
+ events: events.map(event => ({
117
+ id: event.id,
118
+ type: event.type,
119
+ action: event.action,
120
+ receivedAt: event.receivedAt.toISOString(),
121
+ repository: event.repository?.full_name,
122
+ sender: event.sender?.login,
123
+ summary: getEventSummary(event),
124
+ })),
125
+ };
126
+ }
127
+ /**
128
+ * Get a human-readable summary of an event
129
+ */
130
+ function getEventSummary(event) {
131
+ const { type, action, payload, sender, repository } = event;
132
+ const by = sender?.login ? ` by ${sender.login}` : '';
133
+ const repo = repository?.full_name ? ` in ${repository.full_name}` : '';
134
+ switch (type) {
135
+ case 'push': {
136
+ const commits = payload.commits?.length || 0;
137
+ const ref = payload.ref?.replace('refs/heads/', '') || 'unknown';
138
+ return `${commits} commit(s) pushed to ${ref}${by}${repo}`;
139
+ }
140
+ case 'pull_request': {
141
+ const prNumber = payload.number || '?';
142
+ const prTitle = payload.pull_request?.title || '';
143
+ return `PR #${prNumber} ${action}${by}: ${prTitle}`;
144
+ }
145
+ case 'issues': {
146
+ const issueNumber = payload.issue?.number || '?';
147
+ const issueTitle = payload.issue?.title || '';
148
+ return `Issue #${issueNumber} ${action}${by}: ${issueTitle}`;
149
+ }
150
+ case 'issue_comment': {
151
+ const issueNumber = payload.issue?.number || '?';
152
+ return `Comment ${action} on issue #${issueNumber}${by}`;
153
+ }
154
+ case 'release': {
155
+ const tagName = payload.release?.tag_name || '?';
156
+ return `Release ${tagName} ${action}${by}${repo}`;
157
+ }
158
+ case 'workflow_run': {
159
+ const workflowName = payload.workflow_run?.name || 'workflow';
160
+ const conclusion = payload.workflow_run?.conclusion || action;
161
+ return `${workflowName} ${conclusion}${repo}`;
162
+ }
163
+ case 'check_run': {
164
+ const checkName = payload.check_run?.name || 'check';
165
+ const conclusion = payload.check_run?.conclusion || action;
166
+ return `${checkName} ${conclusion}${repo}`;
167
+ }
168
+ case 'create':
169
+ case 'delete': {
170
+ const refType = payload.ref_type || 'ref';
171
+ const ref = payload.ref || '?';
172
+ return `${refType} ${ref} ${type}d${by}${repo}`;
173
+ }
174
+ case 'fork': {
175
+ const forkee = payload.forkee?.full_name || '?';
176
+ return `Forked to ${forkee}${by}`;
177
+ }
178
+ case 'star': {
179
+ return `Repository ${action}red${by}`;
180
+ }
181
+ default:
182
+ return `${type}${action ? ` (${action})` : ''}${by}${repo}`;
183
+ }
184
+ }
185
+ /**
186
+ * Format event type for display
187
+ */
188
+ function formatEventType(type) {
189
+ return type
190
+ .split('_')
191
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
192
+ .join(' ');
193
+ }
194
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/resources/webhooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Start the MCP server with authenticated Octokit
3
+ */
4
+ export declare function startServer(token: string): Promise<void>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,WAAW,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyH5E"}
package/dist/server.js ADDED
@@ -0,0 +1,247 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
4
+ import { Octokit } from '@octokit/rest';
5
+ /**
6
+ * Start the MCP server with authenticated Octokit
7
+ */
8
+ export async function startServer(token) {
9
+ const octokit = new Octokit({ auth: token });
10
+ // Verify token works
11
+ try {
12
+ const { data: user } = await octokit.users.getAuthenticated();
13
+ console.error(`Authenticated as ${user.login}`);
14
+ }
15
+ catch (error) {
16
+ throw new Error('Failed to authenticate with GitHub. Token may be invalid.');
17
+ }
18
+ const server = new Server({
19
+ name: 'github-mcp',
20
+ version: '0.1.0',
21
+ }, {
22
+ capabilities: {
23
+ tools: {},
24
+ },
25
+ });
26
+ // List available tools
27
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
28
+ return {
29
+ tools: [
30
+ {
31
+ name: 'github_repos_list',
32
+ description: 'List repositories for the authenticated user',
33
+ inputSchema: {
34
+ type: 'object',
35
+ properties: {
36
+ visibility: {
37
+ type: 'string',
38
+ enum: ['all', 'public', 'private'],
39
+ description: 'Filter by visibility',
40
+ },
41
+ sort: {
42
+ type: 'string',
43
+ enum: ['created', 'updated', 'pushed', 'full_name'],
44
+ description: 'Sort field',
45
+ },
46
+ per_page: {
47
+ type: 'number',
48
+ description: 'Results per page (max 100)',
49
+ },
50
+ },
51
+ },
52
+ },
53
+ {
54
+ name: 'github_repos_get',
55
+ description: 'Get a repository by owner and name',
56
+ inputSchema: {
57
+ type: 'object',
58
+ properties: {
59
+ owner: {
60
+ type: 'string',
61
+ description: 'Repository owner',
62
+ },
63
+ repo: {
64
+ type: 'string',
65
+ description: 'Repository name',
66
+ },
67
+ },
68
+ required: ['owner', 'repo'],
69
+ },
70
+ },
71
+ {
72
+ name: 'github_issues_list',
73
+ description: 'List issues for a repository',
74
+ inputSchema: {
75
+ type: 'object',
76
+ properties: {
77
+ owner: {
78
+ type: 'string',
79
+ description: 'Repository owner',
80
+ },
81
+ repo: {
82
+ type: 'string',
83
+ description: 'Repository name',
84
+ },
85
+ state: {
86
+ type: 'string',
87
+ enum: ['open', 'closed', 'all'],
88
+ description: 'Issue state filter',
89
+ },
90
+ per_page: {
91
+ type: 'number',
92
+ description: 'Results per page (max 100)',
93
+ },
94
+ },
95
+ required: ['owner', 'repo'],
96
+ },
97
+ },
98
+ {
99
+ name: 'github_issues_create',
100
+ description: 'Create a new issue',
101
+ inputSchema: {
102
+ type: 'object',
103
+ properties: {
104
+ owner: {
105
+ type: 'string',
106
+ description: 'Repository owner',
107
+ },
108
+ repo: {
109
+ type: 'string',
110
+ description: 'Repository name',
111
+ },
112
+ title: {
113
+ type: 'string',
114
+ description: 'Issue title',
115
+ },
116
+ body: {
117
+ type: 'string',
118
+ description: 'Issue body',
119
+ },
120
+ labels: {
121
+ type: 'array',
122
+ items: { type: 'string' },
123
+ description: 'Labels to add',
124
+ },
125
+ },
126
+ required: ['owner', 'repo', 'title'],
127
+ },
128
+ },
129
+ {
130
+ name: 'github_pulls_list',
131
+ description: 'List pull requests for a repository',
132
+ inputSchema: {
133
+ type: 'object',
134
+ properties: {
135
+ owner: {
136
+ type: 'string',
137
+ description: 'Repository owner',
138
+ },
139
+ repo: {
140
+ type: 'string',
141
+ description: 'Repository name',
142
+ },
143
+ state: {
144
+ type: 'string',
145
+ enum: ['open', 'closed', 'all'],
146
+ description: 'PR state filter',
147
+ },
148
+ per_page: {
149
+ type: 'number',
150
+ description: 'Results per page (max 100)',
151
+ },
152
+ },
153
+ required: ['owner', 'repo'],
154
+ },
155
+ },
156
+ {
157
+ name: 'github_user_get',
158
+ description: 'Get the authenticated user',
159
+ inputSchema: {
160
+ type: 'object',
161
+ properties: {},
162
+ },
163
+ },
164
+ ],
165
+ };
166
+ });
167
+ // Handle tool calls
168
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
169
+ const { name, arguments: args } = request.params;
170
+ try {
171
+ switch (name) {
172
+ case 'github_repos_list': {
173
+ const { data } = await octokit.repos.listForAuthenticatedUser({
174
+ visibility: args?.visibility,
175
+ sort: args?.sort,
176
+ per_page: args?.per_page,
177
+ });
178
+ return {
179
+ content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
180
+ };
181
+ }
182
+ case 'github_repos_get': {
183
+ const { data } = await octokit.repos.get({
184
+ owner: args?.owner,
185
+ repo: args?.repo,
186
+ });
187
+ return {
188
+ content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
189
+ };
190
+ }
191
+ case 'github_issues_list': {
192
+ const { data } = await octokit.issues.listForRepo({
193
+ owner: args?.owner,
194
+ repo: args?.repo,
195
+ state: args?.state,
196
+ per_page: args?.per_page,
197
+ });
198
+ return {
199
+ content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
200
+ };
201
+ }
202
+ case 'github_issues_create': {
203
+ const { data } = await octokit.issues.create({
204
+ owner: args?.owner,
205
+ repo: args?.repo,
206
+ title: args?.title,
207
+ body: args?.body,
208
+ labels: args?.labels,
209
+ });
210
+ return {
211
+ content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
212
+ };
213
+ }
214
+ case 'github_pulls_list': {
215
+ const { data } = await octokit.pulls.list({
216
+ owner: args?.owner,
217
+ repo: args?.repo,
218
+ state: args?.state,
219
+ per_page: args?.per_page,
220
+ });
221
+ return {
222
+ content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
223
+ };
224
+ }
225
+ case 'github_user_get': {
226
+ const { data } = await octokit.users.getAuthenticated();
227
+ return {
228
+ content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
229
+ };
230
+ }
231
+ default:
232
+ throw new Error(`Unknown tool: ${name}`);
233
+ }
234
+ }
235
+ catch (error) {
236
+ const message = error instanceof Error ? error.message : String(error);
237
+ return {
238
+ content: [{ type: 'text', text: `Error: ${message}` }],
239
+ isError: true,
240
+ };
241
+ }
242
+ });
243
+ // Connect via stdio
244
+ const transport = new StdioServerTransport();
245
+ await server.connect(transport);
246
+ console.error('MCP server started');
247
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Octokit } from '@octokit/rest';
2
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
3
+ export declare const actionsTools: Tool[];
4
+ export declare function handleActionsTool(octokit: Octokit, args: Record<string, unknown>): Promise<unknown>;
5
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/tools/categories/actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,eAAO,MAAM,YAAY,EAAE,IAAI,EAgS9B,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CA2HlB"}