@jayofemi/shikamaru
Advanced tools
| #!/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"} |
@@ -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; |
+3
-2
@@ -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"} |
+170
-117
@@ -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":"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"} |
+18
-9
| { | ||
| "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": { |
+12
-4
@@ -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 @@ |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
115543
5.07%51
8.51%1205
5.42%124
6.9%0
-100%