@daften/fireflyiii-mcp 0.1.1 → 0.2.0

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.
@@ -1,7 +1,8 @@
1
+ import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
1
2
  import { z } from 'zod';
2
3
  import { unwrapList, unwrapSingle, } from '../transform.js';
3
4
  import { DELETE_ANNOTATIONS, READ_ANNOTATIONS, UPDATE_ANNOTATIONS, WRITE_ANNOTATIONS } from './_annotations.js';
4
- import { dateSchema, defineTool } from './_helpers.js';
5
+ import { AUTOCOMPLETE_FETCH_LIMIT, AUTOCOMPLETE_MAX_SUGGESTIONS, createTtlCache, dateSchema, debugLog, defineTool, parseId, } from './_helpers.js';
5
6
  export async function fetchCategories(client, params) {
6
7
  const response = await client.get('/categories', { page: params.page, limit: params.limit });
7
8
  return unwrapList(response);
@@ -27,6 +28,12 @@ export async function deleteCategory(client, id) {
27
28
  await client.delete(`/categories/${id}`);
28
29
  return { deleted: true, id };
29
30
  }
31
+ // Module-scoped so the cache survives across the stateless HTTP requests autocomplete fires;
32
+ // keyed per identity inside the completion handler so one user never sees another's categories.
33
+ const categoriesCache = createTtlCache();
34
+ export function clearCategoriesCache() {
35
+ categoriesCache.clear();
36
+ }
30
37
  export function registerCategoryTools(server, client) {
31
38
  defineTool(server, 'get_categories', {
32
39
  title: 'Get Categories',
@@ -37,18 +44,34 @@ export function registerCategoryTools(server, client) {
37
44
  },
38
45
  annotations: READ_ANNOTATIONS,
39
46
  }, ({ page, limit }) => fetchCategories(client, { page: page, limit: limit }));
47
+ const categoryIdSchema = completable(z.string().describe('Category ID — use get_categories to find valid IDs'), async (value) => {
48
+ debugLog(`[Autocomplete] Category search input: "${value}"`);
49
+ try {
50
+ const categories = await categoriesCache.get(client.cacheKey(), () => fetchCategories(client, { limit: AUTOCOMPLETE_FETCH_LIMIT }));
51
+ const suggestions = categories.data
52
+ .map((c) => `${c.id} (${c.name ?? ''})`)
53
+ .filter((label) => label.toLowerCase().includes(value.toLowerCase()))
54
+ .slice(0, AUTOCOMPLETE_MAX_SUGGESTIONS);
55
+ debugLog(`[Autocomplete] Category suggestions found: ${suggestions.length}`);
56
+ return suggestions;
57
+ }
58
+ catch (err) {
59
+ debugLog('[Autocomplete Error - Category]:', err);
60
+ return [];
61
+ }
62
+ });
40
63
  defineTool(server, 'get_category_transactions', {
41
64
  title: 'Get Category Transactions',
42
65
  description: 'Get all transactions belonging to a specific Firefly III category. Optionally filter by date range (YYYY-MM-DD). Use get_categories to find valid category IDs.',
43
66
  inputSchema: {
44
- categoryId: z.string().describe('Category ID — use get_categories to find valid IDs'),
67
+ categoryId: categoryIdSchema,
45
68
  start: dateSchema.optional().describe('Start date (YYYY-MM-DD)'),
46
69
  end: dateSchema.optional().describe('End date (YYYY-MM-DD)'),
47
70
  page: z.number().int().positive().optional().default(1).describe('Page number'),
48
71
  limit: z.number().int().positive().max(100).optional().default(50).describe('Results per page (max 100)'),
49
72
  },
50
73
  annotations: READ_ANNOTATIONS,
51
- }, ({ categoryId, start, end, page, limit }) => fetchCategoryTransactions(client, categoryId, {
74
+ }, ({ categoryId, start, end, page, limit }) => fetchCategoryTransactions(client, parseId(categoryId), {
52
75
  start: start,
53
76
  end: end,
54
77
  page: page,
@@ -67,17 +90,38 @@ export function registerCategoryTools(server, client) {
67
90
  title: 'Update Category',
68
91
  description: 'Update an existing category in Firefly III. Only fields provided will be changed. Use get_categories to find valid category IDs.',
69
92
  inputSchema: {
70
- id: z.string().describe('Category ID — use get_categories to find valid IDs'),
93
+ id: categoryIdSchema,
71
94
  name: z.string().optional().describe('Category name'),
72
95
  notes: z.string().optional().describe('Notes'),
73
96
  },
74
97
  annotations: UPDATE_ANNOTATIONS,
75
- }, ({ id, ...params }) => updateCategory(client, id, params));
98
+ }, ({ id, ...params }) => updateCategory(client, parseId(id), params));
76
99
  defineTool(server, 'delete_category', {
77
100
  title: 'Delete Category',
78
101
  description: 'Permanently delete a category from Firefly III. **This action cannot be undone.** Transactions in this category will become uncategorised. Use get_categories to confirm the ID.',
79
- inputSchema: { id: z.string().describe('Category ID — use get_categories to find valid IDs') },
102
+ inputSchema: { id: categoryIdSchema },
80
103
  annotations: DELETE_ANNOTATIONS,
81
- }, ({ id }) => deleteCategory(client, id));
104
+ }, ({ id }) => deleteCategory(client, parseId(id)));
105
+ server.registerPrompt('category-transactions', {
106
+ title: 'Get Transactions by Category',
107
+ description: 'Get transactions for a specific category with autocomplete.',
108
+ argsSchema: {
109
+ category: categoryIdSchema,
110
+ },
111
+ }, async ({ category }) => {
112
+ const id = parseId(category);
113
+ return {
114
+ description: `Get transactions for category ID ${id}`,
115
+ messages: [
116
+ {
117
+ role: 'user',
118
+ content: {
119
+ type: 'text',
120
+ text: `Show me the recent transactions for category ID "${id}".`,
121
+ },
122
+ },
123
+ ],
124
+ };
125
+ });
82
126
  }
83
127
  //# sourceMappingURL=categories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"categories.js","sourceRoot":"","sources":["../../src/tools/categories.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"categories.js","sourceRoot":"","sources":["../../src/tools/categories.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@daften/fireflyiii-mcp",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "MCP server for Firefly III personal finance manager",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,13 +16,18 @@
16
16
  "scripts": {
17
17
  "build": "tsc && chmod +x dist/index.js",
18
18
  "prepublishOnly": "npm run build",
19
+ "prepare": "simple-git-hooks",
19
20
  "dev": "dotenv -e .env -- tsx src/index.ts",
20
21
  "format": "biome format --write src/",
21
22
  "lint": "biome check src/",
23
+ "check": "biome ci src/ && tsc --noEmit && vitest run",
22
24
  "test": "vitest run",
23
25
  "test:watch": "vitest",
24
26
  "test:integration": "dotenv -e .env.test -- vitest run src/tests/integration.test.ts"
25
27
  },
28
+ "simple-git-hooks": {
29
+ "pre-commit": "npm run check"
30
+ },
26
31
  "publishConfig": {
27
32
  "access": "public"
28
33
  },
@@ -47,9 +52,10 @@
47
52
  "zod": "^4.4.3"
48
53
  },
49
54
  "devDependencies": {
50
- "@biomejs/biome": "2.4.15",
55
+ "@biomejs/biome": "2.4.16",
51
56
  "@types/node": "^25.9.1",
52
57
  "dotenv-cli": "^11.0.0",
58
+ "simple-git-hooks": "^2.13.1",
53
59
  "tsx": "^4.22.3",
54
60
  "typescript": "^6.0.3",
55
61
  "vitest": "^4.1.7"