mirror of
https://github.com/modelcontextprotocol/servers.git
synced 2026-04-24 23:05:21 +02:00
Add error handling and logging for GitHub issue creation
- Improve error handling in GitHub issue creation process - Add detailed error messages for repository not found scenarios - Implement global fetch polyfill for node-fetch - Add debug and error logging for issue creation attempts
This commit is contained in:
9
package-lock.json
generated
9
package-lock.json
generated
@@ -4786,6 +4786,12 @@
|
|||||||
"integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
|
"integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/universal-user-agent": {
|
||||||
|
"version": "7.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz",
|
||||||
|
"integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==",
|
||||||
|
"license": "ISC"
|
||||||
|
},
|
||||||
"node_modules/universalify": {
|
"node_modules/universalify": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
|
||||||
@@ -5292,6 +5298,7 @@
|
|||||||
"@types/node": "^22",
|
"@types/node": "^22",
|
||||||
"@types/node-fetch": "^2.6.12",
|
"@types/node-fetch": "^2.6.12",
|
||||||
"node-fetch": "^3.3.2",
|
"node-fetch": "^3.3.2",
|
||||||
|
"universal-user-agent": "^7.0.2",
|
||||||
"zod": "^3.22.4",
|
"zod": "^3.22.4",
|
||||||
"zod-to-json-schema": "^3.23.5"
|
"zod-to-json-schema": "^3.23.5"
|
||||||
},
|
},
|
||||||
@@ -5445,7 +5452,7 @@
|
|||||||
},
|
},
|
||||||
"src/memory": {
|
"src/memory": {
|
||||||
"name": "@modelcontextprotocol/server-memory",
|
"name": "@modelcontextprotocol/server-memory",
|
||||||
"version": "0.6.2",
|
"version": "0.6.3",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@modelcontextprotocol/sdk": "1.0.1"
|
"@modelcontextprotocol/sdk": "1.0.1"
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import {
|
|||||||
} from "@modelcontextprotocol/sdk/types.js";
|
} from "@modelcontextprotocol/sdk/types.js";
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
import { zodToJsonSchema } from 'zod-to-json-schema';
|
import { zodToJsonSchema } from 'zod-to-json-schema';
|
||||||
|
import fetch, { Request, Response } from 'node-fetch';
|
||||||
|
|
||||||
import * as repository from './operations/repository.js';
|
import * as repository from './operations/repository.js';
|
||||||
import * as files from './operations/files.js';
|
import * as files from './operations/files.js';
|
||||||
@@ -27,6 +28,11 @@ import {
|
|||||||
} from './common/errors.js';
|
} from './common/errors.js';
|
||||||
import { VERSION } from "./common/version.js";
|
import { VERSION } from "./common/version.js";
|
||||||
|
|
||||||
|
// If fetch doesn't exist in global scope, add it
|
||||||
|
if (!globalThis.fetch) {
|
||||||
|
globalThis.fetch = fetch as unknown as typeof global.fetch;
|
||||||
|
}
|
||||||
|
|
||||||
const server = new Server(
|
const server = new Server(
|
||||||
{
|
{
|
||||||
name: "github-mcp-server",
|
name: "github-mcp-server",
|
||||||
@@ -248,10 +254,39 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|||||||
case "create_issue": {
|
case "create_issue": {
|
||||||
const args = issues.CreateIssueSchema.parse(request.params.arguments);
|
const args = issues.CreateIssueSchema.parse(request.params.arguments);
|
||||||
const { owner, repo, ...options } = args;
|
const { owner, repo, ...options } = args;
|
||||||
const issue = await issues.createIssue(owner, repo, options);
|
|
||||||
return {
|
try {
|
||||||
content: [{ type: "text", text: JSON.stringify(issue, null, 2) }],
|
console.error(`[DEBUG] Attempting to create issue in ${owner}/${repo}`);
|
||||||
};
|
console.error(`[DEBUG] Issue options:`, JSON.stringify(options, null, 2));
|
||||||
|
|
||||||
|
const issue = await issues.createIssue(owner, repo, options);
|
||||||
|
|
||||||
|
console.error(`[DEBUG] Issue created successfully`);
|
||||||
|
return {
|
||||||
|
content: [{ type: "text", text: JSON.stringify(issue, null, 2) }],
|
||||||
|
};
|
||||||
|
} catch (err) {
|
||||||
|
// Type guard for Error objects
|
||||||
|
const error = err instanceof Error ? err : new Error(String(err));
|
||||||
|
|
||||||
|
console.error(`[ERROR] Failed to create issue:`, error);
|
||||||
|
|
||||||
|
if (error instanceof GitHubResourceNotFoundError) {
|
||||||
|
throw new Error(
|
||||||
|
`Repository '${owner}/${repo}' not found. Please verify:\n` +
|
||||||
|
`1. The repository exists\n` +
|
||||||
|
`2. You have correct access permissions\n` +
|
||||||
|
`3. The owner and repository names are spelled correctly`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Safely access error properties
|
||||||
|
throw new Error(
|
||||||
|
`Failed to create issue: ${error.message}${
|
||||||
|
error.stack ? `\nStack: ${error.stack}` : ''
|
||||||
|
}`
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case "create_pull_request": {
|
case "create_pull_request": {
|
||||||
|
|||||||
Reference in New Issue
Block a user