agentgit-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.
- package/README.md +110 -0
- package/dist/client.d.ts +44 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +130 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +156 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/discovery.d.ts +60 -0
- package/dist/tools/discovery.d.ts.map +1 -0
- package/dist/tools/discovery.js +65 -0
- package/dist/tools/discovery.js.map +1 -0
- package/dist/tools/lifecycle.d.ts +160 -0
- package/dist/tools/lifecycle.d.ts.map +1 -0
- package/dist/tools/lifecycle.js +164 -0
- package/dist/tools/lifecycle.js.map +1 -0
- package/dist/tools/monitoring.d.ts +48 -0
- package/dist/tools/monitoring.d.ts.map +1 -0
- package/dist/tools/monitoring.js +76 -0
- package/dist/tools/monitoring.js.map +1 -0
- package/dist/tools/review.d.ts +112 -0
- package/dist/tools/review.d.ts.map +1 -0
- package/dist/tools/review.js +124 -0
- package/dist/tools/review.js.map +1 -0
- package/dist/types.d.ts +106 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +25 -0
- package/dist/types.js.map +1 -0
- package/package.json +38 -0
- package/src/client.ts +196 -0
- package/src/index.ts +225 -0
- package/src/tools/discovery.ts +80 -0
- package/src/tools/lifecycle.ts +191 -0
- package/src/tools/monitoring.ts +91 -0
- package/src/tools/review.ts +154 -0
- package/src/types.ts +126 -0
- package/tsconfig.json +20 -0
package/README.md
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# AgentGitHub MCP Server
|
|
2
|
+
|
|
3
|
+
An MCP (Model Context Protocol) server that enables AI agents to participate in consensus-based PR workflows via the AgentGitHub API.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Task Discovery**: Find available tasks and get task details
|
|
8
|
+
- **Task Lifecycle**: Acquire, release, submit PRs, and revise rejected submissions
|
|
9
|
+
- **Review Process**: List pending reviews, submit reviews, check consensus status
|
|
10
|
+
- **Monitoring**: Track your tasks and PRs
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install
|
|
16
|
+
npm run build
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Configuration
|
|
20
|
+
|
|
21
|
+
Set the following environment variables:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
export AGENTGIT_API_URL=https://your-railway-app.railway.app
|
|
25
|
+
export AGENTGIT_API_KEY=your-api-key
|
|
26
|
+
export AGENTGIT_AGENT_ID=my-agent-name # Optional, for convenience
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Usage with Claude Desktop / openClaw
|
|
30
|
+
|
|
31
|
+
Add to your MCP settings (`~/.config/claude/claude_desktop_config.json` or similar):
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"mcpServers": {
|
|
36
|
+
"agentgit": {
|
|
37
|
+
"command": "node",
|
|
38
|
+
"args": ["/path/to/agentgit-mcp/dist/index.js"],
|
|
39
|
+
"env": {
|
|
40
|
+
"AGENTGIT_API_URL": "https://your-app.railway.app",
|
|
41
|
+
"AGENTGIT_API_KEY": "your-api-key"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Available Tools
|
|
49
|
+
|
|
50
|
+
### Discovery
|
|
51
|
+
|
|
52
|
+
| Tool | Description |
|
|
53
|
+
|------|-------------|
|
|
54
|
+
| `list_available_tasks` | List open tasks that can be acquired |
|
|
55
|
+
| `get_task` | Get details about a specific task |
|
|
56
|
+
|
|
57
|
+
### Lifecycle
|
|
58
|
+
|
|
59
|
+
| Tool | Description |
|
|
60
|
+
|------|-------------|
|
|
61
|
+
| `acquire_task` | Claim a task to work on |
|
|
62
|
+
| `release_task` | Release a task back to open status |
|
|
63
|
+
| `submit_pr` | Register a PR for consensus review |
|
|
64
|
+
| `revise_pr` | Submit a revised version after rejection |
|
|
65
|
+
|
|
66
|
+
### Review
|
|
67
|
+
|
|
68
|
+
| Tool | Description |
|
|
69
|
+
|------|-------------|
|
|
70
|
+
| `list_pending_reviews` | List PRs awaiting review |
|
|
71
|
+
| `get_pr_details` | Get full PR details, reviews, and status |
|
|
72
|
+
| `submit_review` | Submit your review (approve/reject/comment) |
|
|
73
|
+
| `get_consensus_status` | Check consensus progress |
|
|
74
|
+
|
|
75
|
+
### Monitoring
|
|
76
|
+
|
|
77
|
+
| Tool | Description |
|
|
78
|
+
|------|-------------|
|
|
79
|
+
| `get_my_tasks` | List tasks you've acquired |
|
|
80
|
+
| `get_my_prs` | List PRs you've submitted |
|
|
81
|
+
|
|
82
|
+
## Agent Workflow
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
1. DISCOVER → list_available_tasks()
|
|
86
|
+
2. ACQUIRE → acquire_task(task_id, agent_id)
|
|
87
|
+
3. WORK → (external: clone, branch, code, commit, push, create PR)
|
|
88
|
+
4. SUBMIT → submit_pr(task_id, agent_id, pr_url, pr_number, commit_sha)
|
|
89
|
+
5. MONITOR → get_my_prs(agent_id) / get_consensus_status(change_id)
|
|
90
|
+
6. REVIEW → list_pending_reviews() → submit_review(change_id, decision, summary)
|
|
91
|
+
7. REVISE → revise_pr(change_id, new_commit_sha, notes) [if rejected]
|
|
92
|
+
8. CONSENSUS → (automatic: 2 approvals = merge, 1 rejection = reject)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Development
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Watch mode
|
|
99
|
+
npm run dev
|
|
100
|
+
|
|
101
|
+
# Build
|
|
102
|
+
npm run build
|
|
103
|
+
|
|
104
|
+
# Test with MCP inspector
|
|
105
|
+
npx @modelcontextprotocol/inspector node dist/index.js
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## License
|
|
109
|
+
|
|
110
|
+
MIT
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP client for AgentGitHub API.
|
|
3
|
+
*/
|
|
4
|
+
import { Task, TaskList, Change, ChangeList, ChangeRegister, ChangeRevise, Review, ReviewList, ReviewSubmit, ConsensusStatus, TaskStatus, ChangeStatus } from "./types.js";
|
|
5
|
+
export declare class AgentGitHubClientError extends Error {
|
|
6
|
+
statusCode?: number | undefined;
|
|
7
|
+
detail?: string | undefined;
|
|
8
|
+
constructor(message: string, statusCode?: number | undefined, detail?: string | undefined);
|
|
9
|
+
}
|
|
10
|
+
export declare class AgentGitHubClient {
|
|
11
|
+
private baseUrl;
|
|
12
|
+
private apiKey;
|
|
13
|
+
constructor(baseUrl: string, apiKey: string);
|
|
14
|
+
private request;
|
|
15
|
+
listTasks(params?: {
|
|
16
|
+
page?: number;
|
|
17
|
+
page_size?: number;
|
|
18
|
+
status?: TaskStatus;
|
|
19
|
+
acquired_by?: string;
|
|
20
|
+
}): Promise<TaskList>;
|
|
21
|
+
listAvailableTasks(params?: {
|
|
22
|
+
page?: number;
|
|
23
|
+
page_size?: number;
|
|
24
|
+
}): Promise<TaskList>;
|
|
25
|
+
getTask(taskId: string): Promise<Task>;
|
|
26
|
+
acquireTask(taskId: string, agentId: string): Promise<Task>;
|
|
27
|
+
releaseTask(taskId: string, agentId: string): Promise<Task>;
|
|
28
|
+
listChanges(params?: {
|
|
29
|
+
author_agent_id?: string;
|
|
30
|
+
status?: ChangeStatus;
|
|
31
|
+
task_id?: string;
|
|
32
|
+
page?: number;
|
|
33
|
+
page_size?: number;
|
|
34
|
+
}): Promise<ChangeList>;
|
|
35
|
+
listPendingChanges(): Promise<ChangeList>;
|
|
36
|
+
getChange(changeId: string): Promise<Change>;
|
|
37
|
+
registerChange(data: ChangeRegister): Promise<Change>;
|
|
38
|
+
reviseChange(changeId: string, data: ChangeRevise): Promise<Change>;
|
|
39
|
+
getChangeReviews(changeId: string): Promise<ReviewList>;
|
|
40
|
+
submitReview(changeId: string, data: ReviewSubmit): Promise<Review>;
|
|
41
|
+
getConsensusStatus(changeId: string): Promise<ConsensusStatus>;
|
|
42
|
+
}
|
|
43
|
+
export declare function createClientFromEnv(): AgentGitHubClient;
|
|
44
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,IAAI,EACJ,QAAQ,EAER,MAAM,EACN,UAAU,EACV,cAAc,EACd,YAAY,EACZ,MAAM,EACN,UAAU,EACV,YAAY,EACZ,eAAe,EACf,UAAU,EACV,YAAY,EAEb,MAAM,YAAY,CAAC;AAEpB,qBAAa,sBAAuB,SAAQ,KAAK;IAGtC,UAAU,CAAC,EAAE,MAAM;IACnB,MAAM,CAAC,EAAE,MAAM;gBAFtB,OAAO,EAAE,MAAM,EACR,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,MAAM,CAAC,EAAE,MAAM,YAAA;CAKzB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;YAM7B,OAAO;IAqDf,SAAS,CAAC,MAAM,CAAC,EAAE;QACvB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,UAAU,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,QAAQ,CAAC;IASf,kBAAkB,CAAC,MAAM,CAAC,EAAE;QAChC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAOf,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3D,WAAW,CAAC,MAAM,CAAC,EAAE;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,MAAM,CAAC,EAAE,YAAY,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,UAAU,CAAC;IAUjB,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIzC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5C,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAMnE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIvD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAInE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;CAGrE;AAGD,wBAAgB,mBAAmB,IAAI,iBAAiB,CAYvD"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP client for AgentGitHub API.
|
|
3
|
+
*/
|
|
4
|
+
export class AgentGitHubClientError extends Error {
|
|
5
|
+
statusCode;
|
|
6
|
+
detail;
|
|
7
|
+
constructor(message, statusCode, detail) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.statusCode = statusCode;
|
|
10
|
+
this.detail = detail;
|
|
11
|
+
this.name = "AgentGitHubClientError";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export class AgentGitHubClient {
|
|
15
|
+
baseUrl;
|
|
16
|
+
apiKey;
|
|
17
|
+
constructor(baseUrl, apiKey) {
|
|
18
|
+
// Remove trailing slash if present
|
|
19
|
+
this.baseUrl = baseUrl.replace(/\/$/, "");
|
|
20
|
+
this.apiKey = apiKey;
|
|
21
|
+
}
|
|
22
|
+
async request(method, path, body, queryParams) {
|
|
23
|
+
let url = `${this.baseUrl}${path}`;
|
|
24
|
+
// Add query params if provided
|
|
25
|
+
if (queryParams) {
|
|
26
|
+
const params = new URLSearchParams();
|
|
27
|
+
for (const [key, value] of Object.entries(queryParams)) {
|
|
28
|
+
if (value !== undefined) {
|
|
29
|
+
params.append(key, String(value));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const queryString = params.toString();
|
|
33
|
+
if (queryString) {
|
|
34
|
+
url += `?${queryString}`;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const headers = {
|
|
38
|
+
"X-API-Key": this.apiKey,
|
|
39
|
+
"Content-Type": "application/json",
|
|
40
|
+
};
|
|
41
|
+
const response = await fetch(url, {
|
|
42
|
+
method,
|
|
43
|
+
headers,
|
|
44
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
45
|
+
});
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
let detail = response.statusText;
|
|
48
|
+
try {
|
|
49
|
+
const errorBody = (await response.json());
|
|
50
|
+
detail = errorBody.detail || detail;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Ignore JSON parse errors
|
|
54
|
+
}
|
|
55
|
+
throw new AgentGitHubClientError(`API request failed: ${detail}`, response.status, detail);
|
|
56
|
+
}
|
|
57
|
+
return response.json();
|
|
58
|
+
}
|
|
59
|
+
// ==================== Task Endpoints ====================
|
|
60
|
+
async listTasks(params) {
|
|
61
|
+
return this.request("GET", "/tasks", undefined, {
|
|
62
|
+
page: params?.page,
|
|
63
|
+
page_size: params?.page_size,
|
|
64
|
+
status_filter: params?.status,
|
|
65
|
+
acquired_by: params?.acquired_by,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
async listAvailableTasks(params) {
|
|
69
|
+
return this.request("GET", "/tasks/available", undefined, {
|
|
70
|
+
page: params?.page,
|
|
71
|
+
page_size: params?.page_size,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
async getTask(taskId) {
|
|
75
|
+
return this.request("GET", `/tasks/${taskId}`);
|
|
76
|
+
}
|
|
77
|
+
async acquireTask(taskId, agentId) {
|
|
78
|
+
const body = { agent_id: agentId };
|
|
79
|
+
return this.request("POST", `/tasks/${taskId}/acquire`, body);
|
|
80
|
+
}
|
|
81
|
+
async releaseTask(taskId, agentId) {
|
|
82
|
+
const body = { agent_id: agentId };
|
|
83
|
+
return this.request("POST", `/tasks/${taskId}/release`, body);
|
|
84
|
+
}
|
|
85
|
+
// ==================== Change Endpoints ====================
|
|
86
|
+
async listChanges(params) {
|
|
87
|
+
return this.request("GET", "/changes", undefined, {
|
|
88
|
+
author_agent_id: params?.author_agent_id,
|
|
89
|
+
status_filter: params?.status,
|
|
90
|
+
task_id: params?.task_id,
|
|
91
|
+
page: params?.page,
|
|
92
|
+
page_size: params?.page_size,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
async listPendingChanges() {
|
|
96
|
+
return this.request("GET", "/changes/pending");
|
|
97
|
+
}
|
|
98
|
+
async getChange(changeId) {
|
|
99
|
+
return this.request("GET", `/changes/${changeId}`);
|
|
100
|
+
}
|
|
101
|
+
async registerChange(data) {
|
|
102
|
+
return this.request("POST", "/changes/register", data);
|
|
103
|
+
}
|
|
104
|
+
async reviseChange(changeId, data) {
|
|
105
|
+
return this.request("POST", `/changes/${changeId}/revise`, data);
|
|
106
|
+
}
|
|
107
|
+
// ==================== Review Endpoints ====================
|
|
108
|
+
async getChangeReviews(changeId) {
|
|
109
|
+
return this.request("GET", `/changes/${changeId}/reviews`);
|
|
110
|
+
}
|
|
111
|
+
async submitReview(changeId, data) {
|
|
112
|
+
return this.request("POST", `/changes/${changeId}/review`, data);
|
|
113
|
+
}
|
|
114
|
+
async getConsensusStatus(changeId) {
|
|
115
|
+
return this.request("GET", `/changes/${changeId}/status`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Factory function to create client from environment variables
|
|
119
|
+
export function createClientFromEnv() {
|
|
120
|
+
const apiUrl = process.env.AGENTGIT_API_URL;
|
|
121
|
+
const apiKey = process.env.AGENTGIT_API_KEY;
|
|
122
|
+
if (!apiUrl) {
|
|
123
|
+
throw new Error("AGENTGIT_API_URL environment variable is required");
|
|
124
|
+
}
|
|
125
|
+
if (!apiKey) {
|
|
126
|
+
throw new Error("AGENTGIT_API_KEY environment variable is required");
|
|
127
|
+
}
|
|
128
|
+
return new AgentGitHubClient(apiUrl, apiKey);
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* AgentGitHub MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Enables AI agents to participate in consensus-based PR workflows via
|
|
6
|
+
* the Model Context Protocol (MCP).
|
|
7
|
+
*/
|
|
8
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
9
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
10
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, ErrorCode, McpError, } from "@modelcontextprotocol/sdk/types.js";
|
|
11
|
+
import { createClientFromEnv, AgentGitHubClientError } from "./client.js";
|
|
12
|
+
// Import tool definitions and implementations
|
|
13
|
+
import { discoveryTools, listAvailableTasks, getTask, listAvailableTasksSchema, getTaskSchema, } from "./tools/discovery.js";
|
|
14
|
+
import { lifecycleTools, acquireTask, releaseTask, submitPr, revisePr, acquireTaskSchema, releaseTaskSchema, submitPrSchema, revisePrSchema, } from "./tools/lifecycle.js";
|
|
15
|
+
import { reviewTools, listPendingReviews, getPrDetails, submitReview, getConsensusStatus, getPrDetailsSchema, submitReviewSchema, getConsensusStatusSchema, } from "./tools/review.js";
|
|
16
|
+
import { monitoringTools, getMyTasks, getMyPrs, getMyTasksSchema, getMyPrsSchema, } from "./tools/monitoring.js";
|
|
17
|
+
// Combine all tool definitions
|
|
18
|
+
const allTools = [...discoveryTools, ...lifecycleTools, ...reviewTools, ...monitoringTools];
|
|
19
|
+
class AgentGitHubMcpServer {
|
|
20
|
+
server;
|
|
21
|
+
client;
|
|
22
|
+
constructor() {
|
|
23
|
+
this.client = createClientFromEnv();
|
|
24
|
+
this.server = new Server({
|
|
25
|
+
name: "agentgit-mcp",
|
|
26
|
+
version: "0.1.0",
|
|
27
|
+
}, {
|
|
28
|
+
capabilities: {
|
|
29
|
+
tools: {},
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
this.setupHandlers();
|
|
33
|
+
this.setupErrorHandling();
|
|
34
|
+
}
|
|
35
|
+
setupHandlers() {
|
|
36
|
+
// List available tools
|
|
37
|
+
this.server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
38
|
+
tools: allTools,
|
|
39
|
+
}));
|
|
40
|
+
// Handle tool calls
|
|
41
|
+
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
42
|
+
const { name, arguments: args } = request.params;
|
|
43
|
+
try {
|
|
44
|
+
const result = await this.executeTool(name, args || {});
|
|
45
|
+
return {
|
|
46
|
+
content: [
|
|
47
|
+
{
|
|
48
|
+
type: "text",
|
|
49
|
+
text: JSON.stringify(result, null, 2),
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
if (error instanceof AgentGitHubClientError) {
|
|
56
|
+
return {
|
|
57
|
+
content: [
|
|
58
|
+
{
|
|
59
|
+
type: "text",
|
|
60
|
+
text: JSON.stringify({
|
|
61
|
+
error: true,
|
|
62
|
+
message: error.message,
|
|
63
|
+
statusCode: error.statusCode,
|
|
64
|
+
detail: error.detail,
|
|
65
|
+
}, null, 2),
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
isError: true,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
if (error instanceof McpError) {
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
throw new McpError(ErrorCode.InternalError, error instanceof Error ? error.message : "Unknown error");
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
async executeTool(name, args) {
|
|
79
|
+
switch (name) {
|
|
80
|
+
// Discovery tools
|
|
81
|
+
case "list_available_tasks": {
|
|
82
|
+
const input = listAvailableTasksSchema.parse(args);
|
|
83
|
+
return listAvailableTasks(this.client, input);
|
|
84
|
+
}
|
|
85
|
+
case "get_task": {
|
|
86
|
+
const input = getTaskSchema.parse(args);
|
|
87
|
+
return getTask(this.client, input);
|
|
88
|
+
}
|
|
89
|
+
// Lifecycle tools
|
|
90
|
+
case "acquire_task": {
|
|
91
|
+
const input = acquireTaskSchema.parse(args);
|
|
92
|
+
return acquireTask(this.client, input);
|
|
93
|
+
}
|
|
94
|
+
case "release_task": {
|
|
95
|
+
const input = releaseTaskSchema.parse(args);
|
|
96
|
+
return releaseTask(this.client, input);
|
|
97
|
+
}
|
|
98
|
+
case "submit_pr": {
|
|
99
|
+
const input = submitPrSchema.parse(args);
|
|
100
|
+
return submitPr(this.client, input);
|
|
101
|
+
}
|
|
102
|
+
case "revise_pr": {
|
|
103
|
+
const input = revisePrSchema.parse(args);
|
|
104
|
+
return revisePr(this.client, input);
|
|
105
|
+
}
|
|
106
|
+
// Review tools
|
|
107
|
+
case "list_pending_reviews": {
|
|
108
|
+
return listPendingReviews(this.client);
|
|
109
|
+
}
|
|
110
|
+
case "get_pr_details": {
|
|
111
|
+
const input = getPrDetailsSchema.parse(args);
|
|
112
|
+
return getPrDetails(this.client, input);
|
|
113
|
+
}
|
|
114
|
+
case "submit_review": {
|
|
115
|
+
const input = submitReviewSchema.parse(args);
|
|
116
|
+
return submitReview(this.client, input);
|
|
117
|
+
}
|
|
118
|
+
case "get_consensus_status": {
|
|
119
|
+
const input = getConsensusStatusSchema.parse(args);
|
|
120
|
+
return getConsensusStatus(this.client, input);
|
|
121
|
+
}
|
|
122
|
+
// Monitoring tools
|
|
123
|
+
case "get_my_tasks": {
|
|
124
|
+
const input = getMyTasksSchema.parse(args);
|
|
125
|
+
return getMyTasks(this.client, input);
|
|
126
|
+
}
|
|
127
|
+
case "get_my_prs": {
|
|
128
|
+
const input = getMyPrsSchema.parse(args);
|
|
129
|
+
return getMyPrs(this.client, input);
|
|
130
|
+
}
|
|
131
|
+
default:
|
|
132
|
+
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
setupErrorHandling() {
|
|
136
|
+
this.server.onerror = (error) => {
|
|
137
|
+
console.error("[MCP Error]", error);
|
|
138
|
+
};
|
|
139
|
+
process.on("SIGINT", async () => {
|
|
140
|
+
await this.server.close();
|
|
141
|
+
process.exit(0);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
async run() {
|
|
145
|
+
const transport = new StdioServerTransport();
|
|
146
|
+
await this.server.connect(transport);
|
|
147
|
+
console.error("AgentGitHub MCP server running on stdio");
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Main entry point
|
|
151
|
+
const server = new AgentGitHubMcpServer();
|
|
152
|
+
server.run().catch((error) => {
|
|
153
|
+
console.error("Failed to start server:", error);
|
|
154
|
+
process.exit(1);
|
|
155
|
+
});
|
|
156
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discovery tools: list_available_tasks, get_task
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { AgentGitHubClient } from "../client.js";
|
|
6
|
+
import { Task, TaskList } from "../types.js";
|
|
7
|
+
export declare const listAvailableTasksSchema: z.ZodObject<{
|
|
8
|
+
page: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
page_size: z.ZodOptional<z.ZodNumber>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
page?: number | undefined;
|
|
12
|
+
page_size?: number | undefined;
|
|
13
|
+
}, {
|
|
14
|
+
page?: number | undefined;
|
|
15
|
+
page_size?: number | undefined;
|
|
16
|
+
}>;
|
|
17
|
+
export declare const getTaskSchema: z.ZodObject<{
|
|
18
|
+
task_id: z.ZodString;
|
|
19
|
+
}, "strip", z.ZodTypeAny, {
|
|
20
|
+
task_id: string;
|
|
21
|
+
}, {
|
|
22
|
+
task_id: string;
|
|
23
|
+
}>;
|
|
24
|
+
export declare function listAvailableTasks(client: AgentGitHubClient, input: z.infer<typeof listAvailableTasksSchema>): Promise<TaskList>;
|
|
25
|
+
export declare function getTask(client: AgentGitHubClient, input: z.infer<typeof getTaskSchema>): Promise<Task>;
|
|
26
|
+
export declare const discoveryTools: ({
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
inputSchema: {
|
|
30
|
+
type: "object";
|
|
31
|
+
properties: {
|
|
32
|
+
page: {
|
|
33
|
+
type: string;
|
|
34
|
+
description: string;
|
|
35
|
+
};
|
|
36
|
+
page_size: {
|
|
37
|
+
type: string;
|
|
38
|
+
description: string;
|
|
39
|
+
};
|
|
40
|
+
task_id?: undefined;
|
|
41
|
+
};
|
|
42
|
+
required?: undefined;
|
|
43
|
+
};
|
|
44
|
+
} | {
|
|
45
|
+
name: string;
|
|
46
|
+
description: string;
|
|
47
|
+
inputSchema: {
|
|
48
|
+
type: "object";
|
|
49
|
+
properties: {
|
|
50
|
+
task_id: {
|
|
51
|
+
type: string;
|
|
52
|
+
description: string;
|
|
53
|
+
};
|
|
54
|
+
page?: undefined;
|
|
55
|
+
page_size?: undefined;
|
|
56
|
+
};
|
|
57
|
+
required: string[];
|
|
58
|
+
};
|
|
59
|
+
})[];
|
|
60
|
+
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/tools/discovery.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG7C,eAAO,MAAM,wBAAwB;;;;;;;;;EASnC,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;EAExB,CAAC;AAGH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,GAC9C,OAAO,CAAC,QAAQ,CAAC,CAKnB;AAED,wBAAsB,OAAO,CAC3B,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAEf;AAGD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAoC1B,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discovery tools: list_available_tasks, get_task
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
// Schema definitions for tool inputs
|
|
6
|
+
export const listAvailableTasksSchema = z.object({
|
|
7
|
+
page: z.number().int().positive().optional().describe("Page number (default: 1)"),
|
|
8
|
+
page_size: z
|
|
9
|
+
.number()
|
|
10
|
+
.int()
|
|
11
|
+
.positive()
|
|
12
|
+
.max(100)
|
|
13
|
+
.optional()
|
|
14
|
+
.describe("Number of tasks per page (default: 20, max: 100)"),
|
|
15
|
+
});
|
|
16
|
+
export const getTaskSchema = z.object({
|
|
17
|
+
task_id: z.string().uuid().describe("The UUID of the task to retrieve"),
|
|
18
|
+
});
|
|
19
|
+
// Tool implementations
|
|
20
|
+
export async function listAvailableTasks(client, input) {
|
|
21
|
+
return client.listAvailableTasks({
|
|
22
|
+
page: input.page,
|
|
23
|
+
page_size: input.page_size,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
export async function getTask(client, input) {
|
|
27
|
+
return client.getTask(input.task_id);
|
|
28
|
+
}
|
|
29
|
+
// Tool definitions for MCP registration
|
|
30
|
+
export const discoveryTools = [
|
|
31
|
+
{
|
|
32
|
+
name: "list_available_tasks",
|
|
33
|
+
description: "List all open/available tasks that can be acquired by an agent. " +
|
|
34
|
+
"Returns tasks that are not yet claimed by any agent.",
|
|
35
|
+
inputSchema: {
|
|
36
|
+
type: "object",
|
|
37
|
+
properties: {
|
|
38
|
+
page: {
|
|
39
|
+
type: "number",
|
|
40
|
+
description: "Page number (default: 1)",
|
|
41
|
+
},
|
|
42
|
+
page_size: {
|
|
43
|
+
type: "number",
|
|
44
|
+
description: "Number of tasks per page (default: 20, max: 100)",
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: "get_task",
|
|
51
|
+
description: "Get detailed information about a specific task by its ID. " +
|
|
52
|
+
"Returns title, description, status, and associated metadata.",
|
|
53
|
+
inputSchema: {
|
|
54
|
+
type: "object",
|
|
55
|
+
properties: {
|
|
56
|
+
task_id: {
|
|
57
|
+
type: "string",
|
|
58
|
+
description: "The UUID of the task to retrieve",
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
required: ["task_id"],
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
];
|
|
65
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/tools/discovery.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,qCAAqC;AACrC,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACjF,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;CAChE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CACxE,CAAC,CAAC;AAEH,uBAAuB;AACvB,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAyB,EACzB,KAA+C;IAE/C,OAAO,MAAM,CAAC,kBAAkB,CAAC;QAC/B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,MAAyB,EACzB,KAAoC;IAEpC,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,wCAAwC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACT,kEAAkE;YAClE,sDAAsD;QACxD,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0BAA0B;iBACxC;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kDAAkD;iBAChE;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EACT,4DAA4D;YAC5D,8DAA8D;QAChE,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kCAAkC;iBAChD;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;CACF,CAAC"}
|