@rustledger/mcp-server 0.2.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,122 @@
1
+ // Prompts for the MCP server
2
+ export const PROMPTS = [
3
+ {
4
+ name: "analyze_ledger",
5
+ description: "Analyze a Beancount ledger for insights and potential issues",
6
+ arguments: [
7
+ {
8
+ name: "focus",
9
+ description: "What to focus on: spending, income, assets, or all",
10
+ required: false,
11
+ },
12
+ ],
13
+ },
14
+ {
15
+ name: "write_query",
16
+ description: "Help write a BQL query based on natural language description",
17
+ arguments: [
18
+ {
19
+ name: "description",
20
+ description: "What you want to query in plain English",
21
+ required: true,
22
+ },
23
+ ],
24
+ },
25
+ {
26
+ name: "categorize_transaction",
27
+ description: "Help categorize a transaction with appropriate accounts",
28
+ arguments: [
29
+ {
30
+ name: "description",
31
+ description: "Description of the transaction (payee, amount, context)",
32
+ required: true,
33
+ },
34
+ ],
35
+ },
36
+ ];
37
+ export function getPrompt(name, args) {
38
+ switch (name) {
39
+ case "analyze_ledger": {
40
+ const focus = args?.focus || "all";
41
+ return {
42
+ messages: [
43
+ {
44
+ role: "user",
45
+ content: {
46
+ type: "text",
47
+ text: `Please analyze this Beancount ledger with a focus on ${focus}.
48
+
49
+ Use the following tools to gather information:
50
+ 1. First use \`ledger_stats\` to get an overview
51
+ 2. Use \`list_accounts\` to understand the account structure
52
+ 3. Run appropriate BQL queries to analyze ${focus === "spending" ? "Expenses" : focus === "income" ? "Income" : focus === "assets" ? "Assets" : "all accounts"}
53
+ 4. Look for any validation errors
54
+
55
+ Provide insights on:
56
+ - Overall financial health
57
+ - Spending patterns (if applicable)
58
+ - Account organization
59
+ - Any potential issues or improvements`,
60
+ },
61
+ },
62
+ ],
63
+ };
64
+ }
65
+ case "write_query": {
66
+ const description = args?.description;
67
+ if (!description) {
68
+ throw new Error("Missing required argument: description");
69
+ }
70
+ return {
71
+ messages: [
72
+ {
73
+ role: "user",
74
+ content: {
75
+ type: "text",
76
+ text: `Help me write a BQL (Beancount Query Language) query for the following:
77
+
78
+ "${description}"
79
+
80
+ Please:
81
+ 1. Write the BQL query
82
+ 2. Explain what each part does
83
+ 3. Provide any variations that might be useful
84
+
85
+ Reference the BQL documentation if needed using the rustledger://docs/bql resource.`,
86
+ },
87
+ },
88
+ ],
89
+ };
90
+ }
91
+ case "categorize_transaction": {
92
+ const description = args?.description;
93
+ if (!description) {
94
+ throw new Error("Missing required argument: description");
95
+ }
96
+ return {
97
+ messages: [
98
+ {
99
+ role: "user",
100
+ content: {
101
+ type: "text",
102
+ text: `Help me categorize this transaction in Beancount format:
103
+
104
+ "${description}"
105
+
106
+ Please:
107
+ 1. Suggest appropriate account names following Beancount conventions
108
+ 2. Provide the full transaction entry
109
+ 3. Explain the categorization choice
110
+ 4. Suggest any relevant tags or links
111
+
112
+ If you have access to an existing ledger, use \`list_accounts\` to match existing account naming conventions.`,
113
+ },
114
+ },
115
+ ],
116
+ };
117
+ }
118
+ default:
119
+ throw new Error(`Unknown prompt: ${name}`);
120
+ }
121
+ }
122
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,6BAA6B;AA2B7B,MAAM,CAAC,MAAM,OAAO,GAAuB;IACzC;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,8DAA8D;QAC3E,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,oDAAoD;gBACjE,QAAQ,EAAE,KAAK;aAChB;SACF;KACF;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,8DAA8D;QAC3E,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,yCAAyC;gBACtD,QAAQ,EAAE,IAAI;aACf;SACF;KACF;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,yDAAyD;QACtE,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,yDAAyD;gBACtE,QAAQ,EAAE,IAAI;aACf;SACF;KACF;CACF,CAAC;AAEF,MAAM,UAAU,SAAS,CACvB,IAAY,EACZ,IAA6B;IAE7B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC;YACnC,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE;4BACP,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,wDAAwD,KAAK;;;;;4CAKrC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc;;;;;;;uCAOvH;yBAC1B;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,CAAC;YACtC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE;4BACP,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE;;GAEjB,WAAW;;;;;;;oFAOsE;yBACvE;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAED,KAAK,wBAAwB,CAAC,CAAC,CAAC;YAC9B,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,CAAC;YACtC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE;4BACP,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE;;GAEjB,WAAW;;;;;;;;8GAQgG;yBACjG;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ export declare function getBqlDocs(): string;
2
+ export declare function getBqlTablesDocs(): string;
3
+ export declare function getValidationErrorsDocs(): string;
4
+ export declare function getBqlFunctionsDocs(): string;
5
+ export declare function getDirectivesDocs(): string;
6
+ export interface ResourceDefinition {
7
+ uri: string;
8
+ name: string;
9
+ description: string;
10
+ mimeType: string;
11
+ }
12
+ export declare const RESOURCES: ResourceDefinition[];
13
+ export interface ResourceContents {
14
+ uri: string;
15
+ mimeType: string;
16
+ text: string;
17
+ }
18
+ export declare function getResourceContents(uri: string): ResourceContents | null;
19
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AA2BA,wBAAgB,UAAU,IAAI,MAAM,CAKnC;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAKzC;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAKhD;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAK5C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,SAAS,EAAE,kBAAkB,EAyBzC,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAaxE"}
@@ -0,0 +1,94 @@
1
+ // Resources for the MCP server
2
+ import * as fs from "fs";
3
+ import * as path from "path";
4
+ import { fileURLToPath } from "url";
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = path.dirname(__filename);
7
+ // Load documentation from markdown files
8
+ function loadDoc(filename) {
9
+ // When running from dist/, docs are in dist/docs/
10
+ const docPath = path.join(__dirname, "docs", filename);
11
+ try {
12
+ return fs.readFileSync(docPath, "utf-8");
13
+ }
14
+ catch {
15
+ return `Documentation not found: ${filename}`;
16
+ }
17
+ }
18
+ // Lazy-load documentation
19
+ let _bqlDocs = null;
20
+ let _bqlTablesDocs = null;
21
+ let _validationErrorsDocs = null;
22
+ let _bqlFunctionsDocs = null;
23
+ let _directivesDocs = null;
24
+ export function getBqlDocs() {
25
+ if (_bqlDocs === null) {
26
+ _bqlDocs = loadDoc("bql.md");
27
+ }
28
+ return _bqlDocs;
29
+ }
30
+ export function getBqlTablesDocs() {
31
+ if (_bqlTablesDocs === null) {
32
+ _bqlTablesDocs = loadDoc("bql-tables.md");
33
+ }
34
+ return _bqlTablesDocs;
35
+ }
36
+ export function getValidationErrorsDocs() {
37
+ if (_validationErrorsDocs === null) {
38
+ _validationErrorsDocs = loadDoc("validation-errors.md");
39
+ }
40
+ return _validationErrorsDocs;
41
+ }
42
+ export function getBqlFunctionsDocs() {
43
+ if (_bqlFunctionsDocs === null) {
44
+ _bqlFunctionsDocs = loadDoc("bql-functions.md");
45
+ }
46
+ return _bqlFunctionsDocs;
47
+ }
48
+ export function getDirectivesDocs() {
49
+ if (_directivesDocs === null) {
50
+ _directivesDocs = loadDoc("directives.md");
51
+ }
52
+ return _directivesDocs;
53
+ }
54
+ export const RESOURCES = [
55
+ {
56
+ uri: "rustledger://docs/bql",
57
+ name: "BQL Query Language Reference",
58
+ description: "Documentation for Beancount Query Language",
59
+ mimeType: "text/markdown",
60
+ },
61
+ {
62
+ uri: "rustledger://docs/validation-errors",
63
+ name: "Validation Error Reference",
64
+ description: "All 27 validation error codes with descriptions",
65
+ mimeType: "text/markdown",
66
+ },
67
+ {
68
+ uri: "rustledger://docs/bql-functions",
69
+ name: "BQL Functions Reference",
70
+ description: "Complete BQL function documentation",
71
+ mimeType: "text/markdown",
72
+ },
73
+ {
74
+ uri: "rustledger://docs/directives",
75
+ name: "Beancount Directives Reference",
76
+ description: "All Beancount directive types and their syntax",
77
+ mimeType: "text/markdown",
78
+ },
79
+ ];
80
+ export function getResourceContents(uri) {
81
+ switch (uri) {
82
+ case "rustledger://docs/bql":
83
+ return { uri, mimeType: "text/markdown", text: getBqlDocs() };
84
+ case "rustledger://docs/validation-errors":
85
+ return { uri, mimeType: "text/markdown", text: getValidationErrorsDocs() };
86
+ case "rustledger://docs/bql-functions":
87
+ return { uri, mimeType: "text/markdown", text: getBqlFunctionsDocs() };
88
+ case "rustledger://docs/directives":
89
+ return { uri, mimeType: "text/markdown", text: getDirectivesDocs() };
90
+ default:
91
+ return null;
92
+ }
93
+ }
94
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export interface ToolDefinition {
2
+ name: string;
3
+ description: string;
4
+ inputSchema: {
5
+ type: "object";
6
+ properties: Record<string, unknown>;
7
+ required: string[];
8
+ };
9
+ }
10
+ export declare const validateTool: ToolDefinition;
11
+ export declare const queryTool: ToolDefinition;
12
+ export declare const balancesTool: ToolDefinition;
13
+ export declare const formatTool: ToolDefinition;
14
+ export declare const parseTool: ToolDefinition;
15
+ export declare const completionsTool: ToolDefinition;
16
+ export declare const listPluginsTool: ToolDefinition;
17
+ export declare const runPluginTool: ToolDefinition;
18
+ export declare const editorCompletionsTool: ToolDefinition;
19
+ export declare const editorHoverTool: ToolDefinition;
20
+ export declare const editorDefinitionTool: ToolDefinition;
21
+ export declare const editorDocumentSymbolsTool: ToolDefinition;
22
+ export declare const editorReferencesTool: ToolDefinition;
23
+ export declare const ledgerStatsTool: ToolDefinition;
24
+ export declare const listAccountsTool: ToolDefinition;
25
+ export declare const listCommoditiesTool: ToolDefinition;
26
+ export declare const accountActivityTool: ToolDefinition;
27
+ export declare const formatCheckTool: ToolDefinition;
28
+ export declare const bqlTablesTool: ToolDefinition;
29
+ export declare const directiveAtLineTool: ToolDefinition;
30
+ export declare const findTransactionsTool: ToolDefinition;
31
+ export declare const reportTool: ToolDefinition;
32
+ export declare const validateFileTool: ToolDefinition;
33
+ export declare const queryFileTool: ToolDefinition;
34
+ export declare const formatFileTool: ToolDefinition;
35
+ export declare const TOOLS: ToolDefinition[];
36
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAID,eAAO,MAAM,YAAY,EAAE,cAc1B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,cAmBvB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,cAc1B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,cAcxB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,cAcvB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,cAkB7B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,cAQ7B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,cAkB3B,CAAC;AAIF,eAAO,MAAM,qBAAqB,EAAE,cAsBnC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,cAsB7B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,cAsBlC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,cAcvC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,cAsBlC,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,cAc7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,cAc9B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,cAajC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,cAkBjC,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,cAc7B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,cAS3B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,cAiBjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,cAsClC,CAAC;AAIF,eAAO,MAAM,UAAU,EAAE,cAuBxB,CAAC;AAIF,eAAO,MAAM,gBAAgB,EAAE,cAc9B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,cAiB3B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,cAkB5B,CAAC;AAGF,eAAO,MAAM,KAAK,EAAE,cAAc,EAgCjC,CAAC"}