refactor mcp and add instructions prefix

This commit is contained in:
David Blass
2025-10-17 22:26:24 -04:00
parent 7f1566d9c2
commit c668578c6f
12 changed files with 91 additions and 96 deletions
+6 -18
View File
@@ -1,7 +1,5 @@
import { Octokit } from "@octokit/rest";
import { type } from "arktype";
import { resolveRepoContext } from "../utils/repo-context.ts";
import { tool } from "./shared.ts";
import { getMcpContext, tool } from "./shared.ts";
export const Comment = type({
issueNumber: type.number.describe("the issue number to comment on"),
@@ -12,22 +10,12 @@ export const CommentTool = tool({
name: "create_issue_comment",
description: "Create a comment on a GitHub issue",
parameters: Comment,
execute: async ({ issueNumber, body }: { issueNumber: number; body: string }) => {
execute: async ({ issueNumber, body }) => {
const ctx = getMcpContext();
try {
const githubInstallationToken = process.env.GITHUB_INSTALLATION_TOKEN;
if (!githubInstallationToken) {
throw new Error("GITHUB_INSTALLATION_TOKEN environment variable is required");
}
const repoContext = resolveRepoContext();
const octokit = new Octokit({
auth: githubInstallationToken,
});
const result = await octokit.rest.issues.createComment({
owner: repoContext.owner,
repo: repoContext.name,
const result = await ctx.octokit.rest.issues.createComment({
owner: ctx.owner,
repo: ctx.name,
issue_number: issueNumber,
body: body,
});
+3 -1
View File
@@ -5,6 +5,8 @@ import { fromHere } from "@ark/fs";
const actionPath = fromHere("..");
export const mcpServerName = "gh-pullfrog";
export function createMcpConfig(githubInstallationToken: string) {
const githubRepository = process.env.GITHUB_REPOSITORY;
if (!githubRepository) {
@@ -16,7 +18,7 @@ export function createMcpConfig(githubInstallationToken: string) {
return JSON.stringify(
{
mcpServers: {
minimal_github_comment: {
[mcpServerName]: {
command: "node",
args: [`${actionPath}/mcp/server.ts`],
env: {
+1 -1
View File
@@ -5,7 +5,7 @@ import { CommentTool } from "./comment.ts";
import { addTools } from "./shared.ts";
const server = new FastMCP({
name: "Minimal GitHub Issue Comment Server",
name: "gh-pullfrog",
version: "0.0.1",
});
+22 -1
View File
@@ -1,7 +1,28 @@
import { cached } from "@ark/util";
import { Octokit } from "@octokit/rest";
import type { StandardSchemaV1 } from "@standard-schema/spec";
import type { FastMCP, Tool } from "fastmcp";
import { parseRepoContext, type RepoContext } from "../utils/github.ts";
export const tool = <const params>(tool: Tool<{}, StandardSchemaV1<params>>) => tool;
export const getMcpContext = cached((): McpContext => {
const githubInstallationToken = process.env.GITHUB_INSTALLATION_TOKEN;
if (!githubInstallationToken) {
throw new Error("GITHUB_INSTALLATION_TOKEN environment variable is required");
}
return {
...parseRepoContext(),
octokit: new Octokit({
auth: githubInstallationToken,
}),
};
});
export interface McpContext extends RepoContext {
octokit: Octokit;
}
export const tool = <const params>(tool: Tool<any, StandardSchemaV1<params>>) => tool;
export const addTools = (server: FastMCP, tools: Tool<any, any>[]) => {
for (const tool of tools) {