feat(mcp): add ponytail-mcp, an MCP server for the ruleset (#91)
* feat(mcp): add ponytail-mcp server (prompt + tool) * test(mcp): cover mode resolution and instruction text * Report resolved MCP mode
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
// Pure instruction selection for the Ponytail MCP server. No MCP/SDK imports,
|
||||
// so this stays unit-testable on its own. Reuses the same builder the Claude
|
||||
// hooks and Pi extension use, so every host emits identical rules.
|
||||
import { createRequire } from "node:module";
|
||||
|
||||
const require = createRequire(import.meta.url);
|
||||
const { getPonytailInstructions } = require("../hooks/ponytail-instructions.js");
|
||||
const { getDefaultMode, normalizeMode } = require("../hooks/ponytail-config.js");
|
||||
|
||||
// The three intensities the server offers. "off" has no instructions to serve.
|
||||
export const MODES = ["lite", "full", "ultra"];
|
||||
|
||||
// Resolve a requested mode to a runtime intensity. Unknown, empty, or "off"
|
||||
// falls back to the configured default, then to "full".
|
||||
// ponytail: keep the surface to these three; "off"/"review" aren't served here.
|
||||
export function resolveMode(requested) {
|
||||
const asked = normalizeMode(requested);
|
||||
if (asked && asked !== "off") return asked;
|
||||
|
||||
const fallback = normalizeMode(getDefaultMode());
|
||||
return fallback && fallback !== "off" ? fallback : "full";
|
||||
}
|
||||
|
||||
export function buildInstructions(requested) {
|
||||
return getPonytailInstructions(resolveMode(requested));
|
||||
}
|
||||
Reference in New Issue
Block a user