🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@jayofemi/shikamaru

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@jayofemi/shikamaru - npm Package Compare versions

Comparing version
1.1.1
to
1.2.0
+3
dist/cli.d.ts
#!/usr/bin/env node
export {};
//# sourceMappingURL=cli.d.ts.map
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
#!/usr/bin/env node
// Stdio entry for the shikamaru MCP server.
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { createServer } from "./server.js";
const transport = new StdioServerTransport();
await createServer().connect(transport);
//# sourceMappingURL=cli.js.map
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,4CAA4C;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,YAAY,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
+1
-1

@@ -19,3 +19,3 @@ export declare const DAYS_PER_YEAR_360 = 360;

export declare const SERVER_NAME = "shikamaru";
export declare const SERVER_VERSION = "1.1.1";
export declare const SERVER_VERSION = "1.2.0";
/** Weekday numbers as returned by weekday(): 0 = Sunday through 6 = Saturday. */

@@ -22,0 +22,0 @@ export declare const SUNDAY = 0;

@@ -20,3 +20,3 @@ // Centralized constants. No inline magic numbers or strings (project rule).

export const SERVER_NAME = "shikamaru";
export const SERVER_VERSION = "1.1.1";
export const SERVER_VERSION = "1.2.0";
/** Weekday numbers as returned by weekday(): 0 = Sunday through 6 = Saturday. */

@@ -23,0 +23,0 @@ export const SUNDAY = 0;

@@ -1,3 +0,4 @@

#!/usr/bin/env node
export {};
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
/** Build the shikamaru MCP server (no transport attached). */
export declare function createServer(): McpServer;
//# sourceMappingURL=server.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":""}
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkDpE,8DAA8D;AAC9D,wBAAgB,YAAY,IAAI,SAAS,CAqNxC"}

@@ -1,5 +0,3 @@

#!/usr/bin/env node
// MCP server: exposes shikamaru's deterministic calcs as tools an AI can call.
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

@@ -41,118 +39,173 @@ import { accruedInterest } from "./accrued.js";

.describe("ACT/ACT ICMA only: reference (notional coupon) period boundary, ISO YYYY-MM-DD. Supply referenceStart and referenceEnd together, or neither.");
const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION });
server.registerTool("day_count_fraction", {
title: "Day-count fraction",
description: "Exact day-count fraction between two dates under a market convention. Dates are ISO YYYY-MM-DD. For ACT/ACT ICMA also pass frequency (coupons per year) and, for stub periods, the reference period boundaries. Deterministic; do not estimate this with a model.",
inputSchema: {
start: dateSchema,
end: dateSchema,
convention: conventionSchema,
endIsTermination: terminationSchema,
frequency: icmaFrequencySchema,
referenceStart: referenceDateSchema,
referenceEnd: referenceDateSchema,
},
}, async ({ start, end, convention, endIsTermination, frequency, referenceStart, referenceEnd }) => {
const fraction = dayCountFraction(start, end, convention, { endIsTermination, frequency, referenceStart, referenceEnd });
return { content: [{ type: "text", text: JSON.stringify({ fraction }) }] };
});
server.registerTool("accrued_interest", {
title: "Accrued interest",
description: "Exact simple accrued interest (notional * rate * day-count fraction) between two dates. Dates are ISO YYYY-MM-DD; rate is the annual rate as a decimal (0.05 = 5%). Deterministic.",
inputSchema: {
notional: z.number().finite().describe("Face / principal amount."),
rate: z.number().finite().describe("Annual rate as a decimal, e.g. 0.05 for 5%."),
start: dateSchema,
end: dateSchema,
convention: conventionSchema,
endIsTermination: terminationSchema,
},
}, async ({ notional, rate, start, end, convention, endIsTermination }) => {
const value = accruedInterest({ notional, rate, start, end, convention, options: { endIsTermination } });
return { content: [{ type: "text", text: JSON.stringify({ accruedInterest: value }) }] };
});
server.registerTool("list_conventions", {
title: "List conventions",
description: "List the supported day-count conventions.",
inputSchema: {},
}, async () => {
return { content: [{ type: "text", text: JSON.stringify({ conventions: DAY_COUNT_CONVENTIONS }) }] };
});
server.registerTool("is_business_day", {
title: "Business-day check",
description: "Whether a date is a business day under a holiday calendar, with the reason when it is not (weekend or holiday). Calendars are rules in code (no stale data feed). Deterministic; do not let a model guess market holidays.",
inputSchema: {
date: dateSchema,
calendar: calendarSchema,
},
}, async ({ date, calendar }) => {
const result = {
isBusinessDay: isBusinessDay(date, calendar),
isWeekend: isWeekend(date),
isHoliday: isHoliday(date, calendar),
};
return { content: [{ type: "text", text: JSON.stringify(result) }] };
});
server.registerTool("adjust_date", {
title: "Adjust to a business day",
description: "Adjust a date to a business day under an ISDA convention and holiday calendar. Business days pass through unchanged. modified-following falls back to preceding rather than leave the month (the bond-market default). Deterministic.",
inputSchema: {
date: dateSchema,
convention: businessDayConventionSchema,
calendar: calendarSchema,
},
}, async ({ date, convention, calendar }) => {
const adjusted = adjustDate(date, convention, calendar);
return { content: [{ type: "text", text: JSON.stringify({ adjusted }) }] };
});
server.registerTool("add_business_days", {
title: "Add business days",
description: "Move a signed number of business days under a holiday calendar (settlement math: T+2 is count 2). Zero returns the date unchanged. Deterministic.",
inputSchema: {
date: dateSchema,
count: z.number().int().min(-1000).max(1000).describe("Business days to move; negative moves backward."),
calendar: calendarSchema,
},
}, async ({ date, count, calendar }) => {
const result = addBusinessDays(date, count, calendar);
return { content: [{ type: "text", text: JSON.stringify({ date: result }) }] };
});
server.registerTool("generate_schedule", {
title: "Generate a payment schedule",
description: "Generate coupon/payment accrual periods between an effective and a termination date: monthly to annual frequency, backward or forward roll, short or long stub, optional end-of-month rule, business-day adjustment per calendar. Returns each period's unadjusted and adjusted start and end. This is where hand-rolled date code goes wrong; do not approximate it.",
inputSchema: {
effective: dateSchema,
termination: dateSchema,
frequency: z.enum(SCHEDULE_FREQUENCIES).describe("Coupon frequency: annual, semiannual, quarterly, or monthly."),
calendar: calendarSchema,
convention: businessDayConventionSchema.optional().describe("Adjustment for every date except termination. Default modified-following."),
terminationConvention: businessDayConventionSchema.optional().describe("Adjustment for the termination date. Default: same as convention."),
generation: z.enum(["backward", "forward"]).optional().describe("Roll direction; backward (default) puts any stub in front."),
stub: z.enum(["short", "long"]).optional().describe("Keep the short stub (default) or merge it into its neighbor."),
endOfMonth: z.boolean().optional().describe("When true and the anchor is a month-end, every roll date is a month-end."),
},
}, async ({ effective, termination, frequency, calendar, convention, terminationConvention, generation, stub, endOfMonth }) => {
const periods = generateSchedule({
effective,
termination,
frequency,
calendar,
convention,
terminationConvention,
generation,
stub,
endOfMonth,
const isoDateResultSchema = z.string().describe("ISO calendar date, YYYY-MM-DD.");
/** Every tool is pure math: no side effects, no external world. Declared per the MCP tool-annotation hints. */
const PURE_TOOL_ANNOTATIONS = { readOnlyHint: true, openWorldHint: false };
/** Structured result plus the same JSON as a text block, for clients that only read text content. */
function asResult(payload) {
return { content: [{ type: "text", text: JSON.stringify(payload) }], structuredContent: payload };
}
/** Build the shikamaru MCP server (no transport attached). */
export function createServer() {
const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION });
server.registerTool("day_count_fraction", {
title: "Day-count fraction",
description: "Exact day-count fraction between two dates under a market convention. Dates are ISO YYYY-MM-DD. For ACT/ACT ICMA also pass frequency (coupons per year) and, for stub periods, the reference period boundaries. Deterministic; do not estimate this with a model.",
inputSchema: {
start: dateSchema,
end: dateSchema,
convention: conventionSchema,
endIsTermination: terminationSchema,
frequency: icmaFrequencySchema,
referenceStart: referenceDateSchema,
referenceEnd: referenceDateSchema,
},
outputSchema: {
fraction: z.number().describe("The exact day-count fraction (year fraction) under the convention."),
},
annotations: PURE_TOOL_ANNOTATIONS,
}, async ({ start, end, convention, endIsTermination, frequency, referenceStart, referenceEnd }) => {
const fraction = dayCountFraction(start, end, convention, { endIsTermination, frequency, referenceStart, referenceEnd });
return asResult({ fraction });
});
return { content: [{ type: "text", text: JSON.stringify({ count: periods.length, periods }) }] };
});
server.registerTool("list_calendars", {
title: "List calendars",
description: "List the supported holiday calendars with a one-line description of each.",
inputSchema: {},
}, async () => {
const calendars = CALENDARS.map((id) => ({ id, description: CALENDAR_DESCRIPTIONS[id] }));
return { content: [{ type: "text", text: JSON.stringify({ calendars }) }] };
});
const transport = new StdioServerTransport();
await server.connect(transport);
server.registerTool("accrued_interest", {
title: "Accrued interest",
description: "Exact simple accrued interest (notional * rate * day-count fraction) between two dates. Dates are ISO YYYY-MM-DD; rate is the annual rate as a decimal (0.05 = 5%). Deterministic.",
inputSchema: {
notional: z.number().finite().describe("Face / principal amount."),
rate: z.number().finite().describe("Annual rate as a decimal, e.g. 0.05 for 5%."),
start: dateSchema,
end: dateSchema,
convention: conventionSchema,
endIsTermination: terminationSchema,
},
outputSchema: {
accruedInterest: z.number().describe("Accrued interest in the notional's currency units."),
},
annotations: PURE_TOOL_ANNOTATIONS,
}, async ({ notional, rate, start, end, convention, endIsTermination }) => {
const value = accruedInterest({ notional, rate, start, end, convention, options: { endIsTermination } });
return asResult({ accruedInterest: value });
});
server.registerTool("list_conventions", {
title: "List conventions",
description: "List the supported day-count conventions.",
inputSchema: {},
outputSchema: {
conventions: z.array(z.enum(DAY_COUNT_CONVENTIONS)).describe("Supported day-count conventions by their market names."),
},
annotations: PURE_TOOL_ANNOTATIONS,
}, async () => {
return asResult({ conventions: [...DAY_COUNT_CONVENTIONS] });
});
server.registerTool("is_business_day", {
title: "Business-day check",
description: "Whether a date is a business day under a holiday calendar, with the reason when it is not (weekend or holiday). Calendars are rules in code (no stale data feed). Deterministic; do not let a model guess market holidays.",
inputSchema: {
date: dateSchema,
calendar: calendarSchema,
},
outputSchema: {
isBusinessDay: z.boolean().describe("True when the date is a business day under the calendar."),
isWeekend: z.boolean().describe("True when the date falls on a Saturday or Sunday."),
isHoliday: z.boolean().describe("True when the date is a holiday under the calendar."),
},
annotations: PURE_TOOL_ANNOTATIONS,
}, async ({ date, calendar }) => {
return asResult({
isBusinessDay: isBusinessDay(date, calendar),
isWeekend: isWeekend(date),
isHoliday: isHoliday(date, calendar),
});
});
server.registerTool("adjust_date", {
title: "Adjust to a business day",
description: "Adjust a date to a business day under an ISDA convention and holiday calendar. Business days pass through unchanged. modified-following falls back to preceding rather than leave the month (the bond-market default). Deterministic.",
inputSchema: {
date: dateSchema,
convention: businessDayConventionSchema,
calendar: calendarSchema,
},
outputSchema: {
adjusted: isoDateResultSchema.describe("The adjusted business day, ISO YYYY-MM-DD."),
},
annotations: PURE_TOOL_ANNOTATIONS,
}, async ({ date, convention, calendar }) => {
const adjusted = adjustDate(date, convention, calendar);
return asResult({ adjusted });
});
server.registerTool("add_business_days", {
title: "Add business days",
description: "Move a signed number of business days under a holiday calendar (settlement math: T+2 is count 2). Zero returns the date unchanged. Deterministic.",
inputSchema: {
date: dateSchema,
count: z.number().int().min(-1000).max(1000).describe("Business days to move; negative moves backward."),
calendar: calendarSchema,
},
outputSchema: {
date: isoDateResultSchema.describe("The resulting business day, ISO YYYY-MM-DD."),
},
annotations: PURE_TOOL_ANNOTATIONS,
}, async ({ date, count, calendar }) => {
const result = addBusinessDays(date, count, calendar);
return asResult({ date: result });
});
server.registerTool("generate_schedule", {
title: "Generate a payment schedule",
description: "Generate coupon/payment accrual periods between an effective and a termination date: monthly to annual frequency, backward or forward roll, short or long stub, optional end-of-month rule, business-day adjustment per calendar. Returns each period's unadjusted and adjusted start and end. This is where hand-rolled date code goes wrong; do not approximate it.",
inputSchema: {
effective: dateSchema,
termination: dateSchema,
frequency: z.enum(SCHEDULE_FREQUENCIES).describe("Coupon frequency: annual, semiannual, quarterly, or monthly."),
calendar: calendarSchema,
convention: businessDayConventionSchema.optional().describe("Adjustment for every date except termination. Default modified-following."),
terminationConvention: businessDayConventionSchema.optional().describe("Adjustment for the termination date. Default: same as convention."),
generation: z.enum(["backward", "forward"]).optional().describe("Roll direction; backward (default) puts any stub in front."),
stub: z.enum(["short", "long"]).optional().describe("Keep the short stub (default) or merge it into its neighbor."),
endOfMonth: z.boolean().optional().describe("When true and the anchor is a month-end, every roll date is a month-end."),
},
outputSchema: {
count: z.number().int().describe("Number of accrual periods."),
periods: z
.array(z.object({
unadjustedStart: isoDateResultSchema.describe("Unadjusted accrual start."),
unadjustedEnd: isoDateResultSchema.describe("Unadjusted accrual end."),
start: isoDateResultSchema.describe("Business-day-adjusted accrual start."),
end: isoDateResultSchema.describe("Business-day-adjusted accrual end."),
}))
.describe("The accrual periods in date order."),
},
annotations: PURE_TOOL_ANNOTATIONS,
}, async ({ effective, termination, frequency, calendar, convention, terminationConvention, generation, stub, endOfMonth }) => {
const periods = generateSchedule({
effective,
termination,
frequency,
calendar,
convention,
terminationConvention,
generation,
stub,
endOfMonth,
});
return asResult({ count: periods.length, periods });
});
server.registerTool("list_calendars", {
title: "List calendars",
description: "List the supported holiday calendars with a one-line description of each.",
inputSchema: {},
outputSchema: {
calendars: z
.array(z.object({
id: z.enum(CALENDARS).describe("Calendar identifier."),
description: z.string().describe("One-line description of the calendar."),
}))
.describe("Supported holiday calendars."),
},
annotations: PURE_TOOL_ANNOTATIONS,
}, async () => {
const calendars = CALENDARS.map((id) => ({ id, description: CALENDAR_DESCRIPTIONS[id] }));
return asResult({ calendars });
});
return server;
}
//# sourceMappingURL=server.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAE/E,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9H,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,gBAAgB,GAAG,CAAC;KACxB,IAAI,CAAC,qBAAqB,CAAC;KAC3B,QAAQ,CAAC,oDAAoD,CAAC,CAAC;AACjE,MAAM,UAAU,GAAG,CAAC;KAClB,MAAM,EAAE;KACR,KAAK,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC1D,QAAQ,CAAC,oFAAoF,CAAC,CAAC;AACjG,MAAM,iBAAiB,GAAG,CAAC;KACzB,OAAO,EAAE;KACT,QAAQ,EAAE;KACV,QAAQ,CAAC,4EAA4E,CAAC,CAAC;AACzF,MAAM,cAAc,GAAG,CAAC;KACtB,IAAI,CAAC,SAAS,CAAC;KACf,QAAQ,CACR,0KAA0K,CAC1K,CAAC;AACH,MAAM,2BAA2B,GAAG,CAAC;KACnC,IAAI,CAAC,wBAAwB,CAAC;KAC9B,QAAQ,CAAC,uHAAuH,CAAC,CAAC;AACpI,MAAM,mBAAmB,GAAG,CAAC;KAC3B,MAAM,EAAE;KACR,GAAG,EAAE;KACL,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,2BAA2B,CAAC;KACnF,QAAQ,EAAE;KACV,QAAQ,CAAC,sFAAsF,CAAC,CAAC;AACnG,MAAM,mBAAmB,GAAG,CAAC;KAC3B,MAAM,EAAE;KACR,KAAK,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC1D,QAAQ,EAAE;KACV,QAAQ,CAAC,8IAA8I,CAAC,CAAC;AAC3J,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC;AAElF,+GAA+G;AAC/G,MAAM,qBAAqB,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAW,CAAC;AAEpF,qGAAqG;AACrG,SAAS,QAAQ,CAAoC,OAAU;IAC9D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC;AAC5G,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,YAAY;IAC3B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IAE7E,MAAM,CAAC,YAAY,CAClB,oBAAoB,EACpB;QACC,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACV,mQAAmQ;QACpQ,WAAW,EAAE;YACZ,KAAK,EAAE,UAAU;YACjB,GAAG,EAAE,UAAU;YACf,UAAU,EAAE,gBAAgB;YAC5B,gBAAgB,EAAE,iBAAiB;YACnC,SAAS,EAAE,mBAAmB;YAC9B,cAAc,EAAE,mBAAmB;YACnC,YAAY,EAAE,mBAAmB;SACjC;QACD,YAAY,EAAE;YACb,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC;SACnG;QACD,WAAW,EAAE,qBAAqB;KAClC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,EAAE,EAAE;QAC/F,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;QACzH,OAAO,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/B,CAAC,CACD,CAAC;IAEF,MAAM,CAAC,YAAY,CAClB,kBAAkB,EAClB;QACC,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACV,oLAAoL;QACrL,WAAW,EAAE;YACZ,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YAClE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YACjF,KAAK,EAAE,UAAU;YACjB,GAAG,EAAE,UAAU;YACf,UAAU,EAAE,gBAAgB;YAC5B,gBAAgB,EAAE,iBAAiB;SACnC;QACD,YAAY,EAAE;YACb,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;SAC1F;QACD,WAAW,EAAE,qBAAqB;KAClC,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,EAAE;QACtE,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACzG,OAAO,QAAQ,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7C,CAAC,CACD,CAAC;IAEF,MAAM,CAAC,YAAY,CAClB,kBAAkB,EAClB;QACC,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,2CAA2C;QACxD,WAAW,EAAE,EAAE;QACf,YAAY,EAAE;YACb,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC,wDAAwD,CAAC;SACtH;QACD,WAAW,EAAE,qBAAqB;KAClC,EACD,KAAK,IAAI,EAAE;QACV,OAAO,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC,CACD,CAAC;IAEF,MAAM,CAAC,YAAY,CAClB,iBAAiB,EACjB;QACC,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACV,4NAA4N;QAC7N,WAAW,EAAE;YACZ,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,cAAc;SACxB;QACD,YAAY,EAAE;YACb,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;YAC/F,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;YACpF,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;SACtF;QACD,WAAW,EAAE,qBAAqB;KAClC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC5B,OAAO,QAAQ,CAAC;YACf,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC;YAC5C,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC;YAC1B,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC;IACJ,CAAC,CACD,CAAC;IAEF,MAAM,CAAC,YAAY,CAClB,aAAa,EACb;QACC,KAAK,EAAE,0BAA0B;QACjC,WAAW,EACV,uOAAuO;QACxO,WAAW,EAAE;YACZ,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,2BAA2B;YACvC,QAAQ,EAAE,cAAc;SACxB;QACD,YAAY,EAAE;YACb,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,CAAC,4CAA4C,CAAC;SACpF;QACD,WAAW,EAAE,qBAAqB;KAClC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QACxD,OAAO,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/B,CAAC,CACD,CAAC;IAEF,MAAM,CAAC,YAAY,CAClB,mBAAmB,EACnB;QACC,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACV,mJAAmJ;QACpJ,WAAW,EAAE;YACZ,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,iDAAiD,CAAC;YACxG,QAAQ,EAAE,cAAc;SACxB;QACD,YAAY,EAAE;YACb,IAAI,EAAE,mBAAmB,CAAC,QAAQ,CAAC,6CAA6C,CAAC;SACjF;QACD,WAAW,EAAE,qBAAqB;KAClC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QACnC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACtD,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,CAAC,CACD,CAAC;IAEF,MAAM,CAAC,YAAY,CAClB,mBAAmB,EACnB;QACC,KAAK,EAAE,6BAA6B;QACpC,WAAW,EACV,uWAAuW;QACxW,WAAW,EAAE;YACZ,SAAS,EAAE,UAAU;YACrB,WAAW,EAAE,UAAU;YACvB,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,8DAA8D,CAAC;YAChH,QAAQ,EAAE,cAAc;YACxB,UAAU,EAAE,2BAA2B,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2EAA2E,CAAC;YACxI,qBAAqB,EAAE,2BAA2B,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mEAAmE,CAAC;YAC3I,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;YAC7H,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;YACnH,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0EAA0E,CAAC;SACvH;QACD,YAAY,EAAE;YACb,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YAC9D,OAAO,EAAE,CAAC;iBACR,KAAK,CACL,CAAC,CAAC,MAAM,CAAC;gBACR,eAAe,EAAE,mBAAmB,CAAC,QAAQ,CAAC,2BAA2B,CAAC;gBAC1E,aAAa,EAAE,mBAAmB,CAAC,QAAQ,CAAC,yBAAyB,CAAC;gBACtE,KAAK,EAAE,mBAAmB,CAAC,QAAQ,CAAC,sCAAsC,CAAC;gBAC3E,GAAG,EAAE,mBAAmB,CAAC,QAAQ,CAAC,oCAAoC,CAAC;aACvE,CAAC,CACF;iBACA,QAAQ,CAAC,oCAAoC,CAAC;SAChD;QACD,WAAW,EAAE,qBAAqB;KAClC,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,qBAAqB,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;QAC1H,MAAM,OAAO,GAAG,gBAAgB,CAAC;YAChC,SAAS;YACT,WAAW;YACX,SAAS;YACT,QAAQ;YACR,UAAU;YACV,qBAAqB;YACrB,UAAU;YACV,IAAI;YACJ,UAAU;SACV,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC,CACD,CAAC;IAEF,MAAM,CAAC,YAAY,CAClB,gBAAgB,EAChB;QACC,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,2EAA2E;QACxF,WAAW,EAAE,EAAE;QACf,YAAY,EAAE;YACb,SAAS,EAAE,CAAC;iBACV,KAAK,CACL,CAAC,CAAC,MAAM,CAAC;gBACR,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;gBACtD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;aACzE,CAAC,CACF;iBACA,QAAQ,CAAC,8BAA8B,CAAC;SAC1C;QACD,WAAW,EAAE,qBAAqB;KAClC,EACD,KAAK,IAAI,EAAE;QACV,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,qBAAqB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1F,OAAO,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAChC,CAAC,CACD,CAAC;IAEF,OAAO,MAAM,CAAC;AACf,CAAC"}
{
"name": "@jayofemi/shikamaru",
"version": "1.1.1",
"version": "1.2.0",
"mcpName": "io.github.JayOfemi/shikamaru",

@@ -18,3 +18,3 @@ "description": "Provably correct day-count, holiday-calendar, business-day, and payment-schedule calculations, as a TypeScript library and an MCP server.",

"bin": {
"shikamaru-mcp": "./dist/server.js"
"shikamaru-mcp": "./dist/cli.js"
},

@@ -39,3 +39,3 @@ "files": [

"test:watch": "vitest",
"mcp": "node dist/server.js",
"mcp": "node dist/cli.js",
"vectors": "python scripts/generate-vectors.py",

@@ -45,12 +45,21 @@ "prepublishOnly": "npm run build && npm test"

"keywords": [
"mcp",
"model-context-protocol",
"typescript",
"finance",
"fintech",
"quantitative-finance",
"quantlib",
"isda",
"day-count",
"business-days",
"holiday-calendar",
"accrued-interest",
"isda",
"holiday-calendar",
"business-day",
"payment-schedule",
"finance",
"date-math",
"deterministic",
"mcp",
"model-context-protocol"
"claude",
"anthropic",
"npm",
"nodejs"
],

@@ -57,0 +66,0 @@ "engines": {

@@ -19,2 +19,3 @@ # shikamaru

- All of it exposed as a library and as an MCP server.
- Every MCP tool is annotated read-only and returns structured output (typed JSON under an output schema) alongside the plain-text result, so an agent client can consume the numbers without parsing text.

@@ -71,6 +72,6 @@ ### Calendar maintenance contract

npm run build
node dist/server.js
node dist/cli.js
```
Once published, an MCP client can launch it directly:
Or launch the published package directly:

@@ -83,9 +84,16 @@ ```

Claude Code users can also install it as a plugin, which registers the MCP server automatically:
```
/plugin marketplace add JayOfemi/shikamaru
/plugin install shikamaru@shikamaru
```
## Verify the MCP server
The standard way to test shikamaru's server is the official MCP Inspector. The unit tests cover the library; the Inspector covers the server layer they do not touch.
The test suite exercises the server end to end in memory, covering tool listing, read-only annotations, structured output against each output schema, and a call to every tool. For an interactive check, use the official MCP Inspector:
```
npm run build
npx @modelcontextprotocol/inspector node dist/server.js
npx @modelcontextprotocol/inspector node dist/cli.js
```

@@ -92,0 +100,0 @@