diff --git a/apps/harness/Dockerfile b/apps/harness/Dockerfile index abde062..4817ee8 100644 --- a/apps/harness/Dockerfile +++ b/apps/harness/Dockerfile @@ -45,7 +45,6 @@ COPY --from=gitea-mcp-builder /usr/local/bin/gitea-mcp /usr/local/bin/gitea-mcp RUN npm install -g \ @modelcontextprotocol/server-postgres \ @modelcontextprotocol/server-filesystem \ - @modelcontextprotocol/server-git \ kubernetes-mcp-server RUN addgroup --system --gid 1001 nodejs diff --git a/apps/harness/src/lib/mcp-config.ts b/apps/harness/src/lib/mcp-config.ts index 1104402..35b465d 100644 --- a/apps/harness/src/lib/mcp-config.ts +++ b/apps/harness/src/lib/mcp-config.ts @@ -1,10 +1,23 @@ +import { existsSync } from "node:fs"; import { mkdir, writeFile } from "node:fs/promises"; -import { join } from "node:path"; +import { join, resolve } from "node:path"; import { getRawCredentialsByProvider } from "./credentials"; import type { AgentRuntime } from "./agents"; const DEFAULT_GITEA_URL = "http://gitea.platform.svc:3000"; +/** Resolve the harness MCP server script — prefer compiled bundle, fall back to source + tsx. */ +function resolveHarnessMcp(): { command: string; args: string[] } { + // Compiled bundle from `scripts/build-mcp.mjs` (production) + const bundled = resolve(__dirname, "../../dist/mcp-server.mjs"); + if (existsSync(bundled)) { + return { command: "node", args: [bundled] }; + } + // Source file via tsx (development) + const source = resolve(__dirname, "../mcp-server.ts"); + return { command: "npx", args: ["tsx", source] }; +} + interface McpServerDef { command: string; args: string[]; @@ -57,10 +70,16 @@ async function buildMcpServers(workDir: string): Promise = {}; + if (process.env.DATABASE_URL) harnessEnv.DATABASE_URL = process.env.DATABASE_URL; + if (process.env.HARNESS_KNOWLEDGE_DIR) harnessEnv.HARNESS_KNOWLEDGE_DIR = process.env.HARNESS_KNOWLEDGE_DIR; + + const harnessMcp = resolveHarnessMcp(); + servers.harness = { + command: harnessMcp.command, + args: harnessMcp.args, + env: harnessEnv, }; return servers;