54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
import { z } from 'zod';
|
|
|
|
import {
|
|
formatRepoEvidenceResponse,
|
|
REPO_EVIDENCE_ACTIONS,
|
|
runRepoEvidenceRequestDirect,
|
|
} from './repo-evidence.js';
|
|
|
|
export function registerRepoEvidenceTool(
|
|
server: McpServer,
|
|
repoRoot: string,
|
|
): void {
|
|
server.tool(
|
|
'read_repo_evidence',
|
|
'Read fixed git evidence directly from EJCLAW_WORK_DIR without broad shell access. Use this when reviewer/arbiter needs current branch, dirty state, recent commits, or a specific commit/ref.',
|
|
{
|
|
action: z
|
|
.enum(REPO_EVIDENCE_ACTIONS)
|
|
.describe(
|
|
'git_status=current branch and dirty state, git_head=current HEAD, git_recent_log=recent commits, git_show_ref=show a specific ref/commit',
|
|
),
|
|
ref: z
|
|
.string()
|
|
.optional()
|
|
.describe('Only for git_show_ref. Defaults to HEAD.'),
|
|
limit: z
|
|
.number()
|
|
.int()
|
|
.min(1)
|
|
.max(30)
|
|
.optional()
|
|
.describe('Only for git_recent_log. Defaults to 10, max 30.'),
|
|
},
|
|
async (args) => {
|
|
const response = await runRepoEvidenceRequestDirect(repoRoot, {
|
|
action: args.action,
|
|
ref: args.ref,
|
|
limit: args.limit,
|
|
});
|
|
|
|
return {
|
|
content: [
|
|
{
|
|
type: 'text' as const,
|
|
text: formatRepoEvidenceResponse(response),
|
|
},
|
|
],
|
|
isError: !response.ok,
|
|
};
|
|
},
|
|
);
|
|
}
|