From 94e2b5f6e054be8f6d2c782f87fa78524897b204 Mon Sep 17 00:00:00 2001 From: David Blass Date: Mon, 13 Oct 2025 14:19:47 -0400 Subject: [PATCH] add terrible debugging --- entry.cjs | 2 +- mcp/server.ts | 207 ++++++++++++++++++++++++++++++++------------------ package.json | 2 +- 3 files changed, 136 insertions(+), 75 deletions(-) diff --git a/entry.cjs b/entry.cjs index cb364b5..ddb5fda 100755 --- a/entry.cjs +++ b/entry.cjs @@ -26163,7 +26163,7 @@ async function main(params) { // package.json var package_default = { name: "@pullfrog/action", - version: "0.0.28", + version: "0.0.29", type: "module", files: [ "index.js", diff --git a/mcp/server.ts b/mcp/server.ts index dea277f..1c38758 100644 --- a/mcp/server.ts +++ b/mcp/server.ts @@ -1,4 +1,5 @@ #!/usr/bin/env node +import { writeFileSync } from "node:fs"; // Minimal GitHub Issue Comment MCP Server import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; @@ -7,10 +8,34 @@ import { type } from "arktype"; import { z } from "zod"; import { resolveRepoContext } from "../utils/repo-context.ts"; -const server = new McpServer({ - name: "Minimal GitHub Issue Comment Server", - version: "0.0.1", -}); +// Simple error logging to file +function logError(message: string, error?: any) { + const timestamp = new Date().toISOString(); + const errorText = error ? `\nError: ${error.message}\nStack: ${error.stack}` : ""; + const logEntry = `[${timestamp}] ${message}${errorText}\n`; + + try { + writeFileSync("/tmp/mcp-error.log", logEntry, { flag: "a" }); + console.error(logEntry); + } catch (writeError) { + console.error(`Failed to write error log: ${writeError}`); + console.error(logEntry); + } +} + +let server: McpServer; + +try { + logError("Creating MCP server..."); + server = new McpServer({ + name: "Minimal GitHub Issue Comment Server", + version: "0.0.1", + }); + logError("MCP server created successfully"); +} catch (error) { + logError("Failed to create MCP server", error); + process.exit(1); +} // Define the schema for creating issue comments const Comment = type({ @@ -18,78 +43,114 @@ const Comment = type({ body: type.string.describe("the comment body content"), }); -server.tool( - "create_issue_comment", - "Create a comment on a GitHub issue", - { - issueNumber: z.number().describe("the issue number to comment on"), - body: z.string().describe("the comment body content"), - }, - async ({ issueNumber, body }) => { - try { - Comment.assert({ issueNumber, body }); +try { + logError("Registering create_issue_comment tool..."); - const githubInstallationToken = process.env.GITHUB_INSTALLATION_TOKEN; - if (!githubInstallationToken) { - throw new Error( - "GITHUB_INSTALLATION_TOKEN environment variable is required" - ); + server.tool( + "create_issue_comment", + "Create a comment on a GitHub issue", + { + issueNumber: z.number().describe("the issue number to comment on"), + body: z.string().describe("the comment body content"), + }, + async ({ issueNumber, body }) => { + try { + Comment.assert({ issueNumber, body }); + + const githubInstallationToken = process.env.GITHUB_INSTALLATION_TOKEN; + if (!githubInstallationToken) { + throw new Error("GITHUB_INSTALLATION_TOKEN environment variable is required"); + } + + // Resolve repository context from environment + const repoContext = resolveRepoContext(); + + const octokit = new Octokit({ + auth: githubInstallationToken, + }); + + const result = await octokit.rest.issues.createComment({ + owner: repoContext.owner, + repo: repoContext.name, + issue_number: issueNumber, + body: body, + }); + + return { + content: [ + { + type: "text", + text: JSON.stringify( + { + success: true, + commentId: result.data.id, + url: result.data.html_url, + body: result.data.body, + }, + null, + 2 + ), + }, + ], + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + logError("Tool execution failed", error); + return { + content: [ + { + type: "text", + text: `Error creating comment: ${errorMessage}`, + }, + ], + error: errorMessage, + isError: true, + }; } - - // Resolve repository context from environment - const repoContext = resolveRepoContext(); - - const octokit = new Octokit({ - auth: githubInstallationToken, - }); - - const result = await octokit.rest.issues.createComment({ - owner: repoContext.owner, - repo: repoContext.name, - issue_number: issueNumber, - body: body, - }); - - return { - content: [ - { - type: "text", - text: JSON.stringify( - { - success: true, - commentId: result.data.id, - url: result.data.html_url, - body: result.data.body, - }, - null, - 2 - ), - }, - ], - }; - } catch (error) { - const errorMessage = - error instanceof Error ? error.message : String(error); - return { - content: [ - { - type: "text", - text: `Error creating comment: ${errorMessage}`, - }, - ], - error: errorMessage, - isError: true, - }; } - } -); + ); -async function runServer() { - const transport = new StdioServerTransport(); - await server.connect(transport); - process.on("exit", () => { - server.close(); - }); + logError("Tool registered successfully"); +} catch (error) { + logError("Failed to register tool", error); + process.exit(1); } -await runServer(); +async function runServer() { + try { + logError("Starting MCP server..."); + + const transport = new StdioServerTransport(); + logError("Transport created, attempting connection..."); + + await server.connect(transport); + logError("MCP server connected successfully"); + + process.on("exit", () => { + logError("Process exiting, closing server..."); + server.close(); + }); + + process.on("SIGTERM", () => { + logError("SIGTERM received, closing server..."); + server.close(); + process.exit(0); + }); + + process.on("SIGINT", () => { + logError("SIGINT received, closing server..."); + server.close(); + process.exit(0); + }); + } catch (error) { + logError("Server startup failed", error); + process.exit(1); + } +} + +logError("Initializing MCP server process..."); + +runServer().catch((error) => { + logError("Unhandled server error", error); + process.exit(1); +}); diff --git a/package.json b/package.json index 3bba7e3..50a6f01 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@pullfrog/action", - "version": "0.0.28", + "version": "0.0.29", "type": "module", "files": [ "index.js",