quantix-mcp 1.0.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.

Potentially problematic release.


This version of quantix-mcp might be problematic. Click here for more details.

Files changed (148) hide show
  1. package/.github/agents/copilot-instructions.md +32 -0
  2. package/.github/agents/speckit.analyze.agent.md +184 -0
  3. package/.github/agents/speckit.checklist.agent.md +294 -0
  4. package/.github/agents/speckit.clarify.agent.md +181 -0
  5. package/.github/agents/speckit.constitution.agent.md +82 -0
  6. package/.github/agents/speckit.implement.agent.md +135 -0
  7. package/.github/agents/speckit.plan.agent.md +89 -0
  8. package/.github/agents/speckit.specify.agent.md +258 -0
  9. package/.github/agents/speckit.tasks.agent.md +137 -0
  10. package/.github/agents/speckit.taskstoissues.agent.md +30 -0
  11. package/.github/copilot-instructions.md +17 -0
  12. package/.github/prompts/speckit.analyze.prompt.md +3 -0
  13. package/.github/prompts/speckit.checklist.prompt.md +3 -0
  14. package/.github/prompts/speckit.clarify.prompt.md +3 -0
  15. package/.github/prompts/speckit.constitution.prompt.md +3 -0
  16. package/.github/prompts/speckit.implement.prompt.md +3 -0
  17. package/.github/prompts/speckit.plan.prompt.md +3 -0
  18. package/.github/prompts/speckit.specify.prompt.md +3 -0
  19. package/.github/prompts/speckit.tasks.prompt.md +3 -0
  20. package/.github/prompts/speckit.taskstoissues.prompt.md +3 -0
  21. package/.github/workflows/publish.yaml +28 -0
  22. package/.opencode/command/speckit.analyze.md +184 -0
  23. package/.opencode/command/speckit.checklist.md +294 -0
  24. package/.opencode/command/speckit.clarify.md +181 -0
  25. package/.opencode/command/speckit.constitution.md +84 -0
  26. package/.opencode/command/speckit.implement.md +135 -0
  27. package/.opencode/command/speckit.plan.md +89 -0
  28. package/.opencode/command/speckit.specify.md +258 -0
  29. package/.opencode/command/speckit.tasks.md +137 -0
  30. package/.opencode/command/speckit.taskstoissues.md +30 -0
  31. package/.specify/memory/constitution.md +58 -0
  32. package/.specify/scripts/powershell/check-prerequisites.ps1 +148 -0
  33. package/.specify/scripts/powershell/common.ps1 +137 -0
  34. package/.specify/scripts/powershell/create-new-feature.ps1 +283 -0
  35. package/.specify/scripts/powershell/setup-plan.ps1 +61 -0
  36. package/.specify/scripts/powershell/update-agent-context.ps1 +448 -0
  37. package/.specify/templates/agent-file-template.md +28 -0
  38. package/.specify/templates/checklist-template.md +40 -0
  39. package/.specify/templates/constitution-template.md +50 -0
  40. package/.specify/templates/plan-template.md +104 -0
  41. package/.specify/templates/spec-template.md +115 -0
  42. package/.specify/templates/tasks-template.md +251 -0
  43. package/.vscode/launch.json +14 -0
  44. package/.vscode/settings.json +14 -0
  45. package/.vscode/tasks.json +15 -0
  46. package/README.md +151 -0
  47. package/dist/config.d.ts +8 -0
  48. package/dist/config.d.ts.map +1 -0
  49. package/dist/config.js +31 -0
  50. package/dist/config.js.map +1 -0
  51. package/dist/index.d.ts +6 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +48 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/services/apiClient.d.ts +14 -0
  56. package/dist/services/apiClient.d.ts.map +1 -0
  57. package/dist/services/apiClient.js +41 -0
  58. package/dist/services/apiClient.js.map +1 -0
  59. package/dist/tools/accounts.d.ts +3 -0
  60. package/dist/tools/accounts.d.ts.map +1 -0
  61. package/dist/tools/accounts.js +77 -0
  62. package/dist/tools/accounts.js.map +1 -0
  63. package/dist/tools/categories.d.ts +3 -0
  64. package/dist/tools/categories.d.ts.map +1 -0
  65. package/dist/tools/categories.js +57 -0
  66. package/dist/tools/categories.js.map +1 -0
  67. package/dist/tools/credit-cards.d.ts +3 -0
  68. package/dist/tools/credit-cards.d.ts.map +1 -0
  69. package/dist/tools/credit-cards.js +93 -0
  70. package/dist/tools/credit-cards.js.map +1 -0
  71. package/dist/tools/settings.d.ts +3 -0
  72. package/dist/tools/settings.d.ts.map +1 -0
  73. package/dist/tools/settings.js +37 -0
  74. package/dist/tools/settings.js.map +1 -0
  75. package/dist/tools/summary.d.ts +3 -0
  76. package/dist/tools/summary.d.ts.map +1 -0
  77. package/dist/tools/summary.js +16 -0
  78. package/dist/tools/summary.js.map +1 -0
  79. package/dist/tools/transactions.d.ts +3 -0
  80. package/dist/tools/transactions.d.ts.map +1 -0
  81. package/dist/tools/transactions.js +84 -0
  82. package/dist/tools/transactions.js.map +1 -0
  83. package/dist/types/schemas.d.ts +288 -0
  84. package/dist/types/schemas.d.ts.map +1 -0
  85. package/dist/types/schemas.js +170 -0
  86. package/dist/types/schemas.js.map +1 -0
  87. package/openapi.yaml +1443 -0
  88. package/package.json +41 -0
  89. package/specs/001-mcp-api-integration/checklists/requirements.md +34 -0
  90. package/specs/001-mcp-api-integration/contracts/openapi.yaml +636 -0
  91. package/specs/001-mcp-api-integration/data-model.md +106 -0
  92. package/specs/001-mcp-api-integration/plan.md +73 -0
  93. package/specs/001-mcp-api-integration/quickstart.md +74 -0
  94. package/specs/001-mcp-api-integration/research.md +58 -0
  95. package/specs/001-mcp-api-integration/spec.md +119 -0
  96. package/specs/001-mcp-api-integration/tasks.md +64 -0
  97. package/src/config.ts +36 -0
  98. package/src/index.ts +60 -0
  99. package/src/services/apiClient.ts +49 -0
  100. package/src/tools/accounts.ts +111 -0
  101. package/src/tools/categories.ts +81 -0
  102. package/src/tools/credit-cards.ts +132 -0
  103. package/src/tools/settings.ts +51 -0
  104. package/src/tools/summary.ts +20 -0
  105. package/src/tools/transactions.ts +118 -0
  106. package/src/types/schemas.ts +193 -0
  107. package/tests/benchmark.test.d.ts +2 -0
  108. package/tests/benchmark.test.d.ts.map +1 -0
  109. package/tests/benchmark.test.js +33 -0
  110. package/tests/benchmark.test.js.map +1 -0
  111. package/tests/benchmark.test.ts +38 -0
  112. package/tests/server.test.d.ts +2 -0
  113. package/tests/server.test.d.ts.map +1 -0
  114. package/tests/server.test.js +13 -0
  115. package/tests/server.test.js.map +1 -0
  116. package/tests/server.test.ts +14 -0
  117. package/tests/setup.d.ts +4 -0
  118. package/tests/setup.d.ts.map +1 -0
  119. package/tests/setup.js +17 -0
  120. package/tests/setup.js.map +1 -0
  121. package/tests/setup.ts +20 -0
  122. package/tests/tools/accounts.test.ts +118 -0
  123. package/tests/tools/categories.test.d.ts +2 -0
  124. package/tests/tools/categories.test.d.ts.map +1 -0
  125. package/tests/tools/categories.test.js +63 -0
  126. package/tests/tools/categories.test.js.map +1 -0
  127. package/tests/tools/categories.test.ts +78 -0
  128. package/tests/tools/credit-cards.test.d.ts +2 -0
  129. package/tests/tools/credit-cards.test.d.ts.map +1 -0
  130. package/tests/tools/credit-cards.test.js +71 -0
  131. package/tests/tools/credit-cards.test.js.map +1 -0
  132. package/tests/tools/credit-cards.test.ts +89 -0
  133. package/tests/tools/summary.test.d.ts +2 -0
  134. package/tests/tools/summary.test.d.ts.map +1 -0
  135. package/tests/tools/summary.test.js +36 -0
  136. package/tests/tools/summary.test.js.map +1 -0
  137. package/tests/tools/summary.test.ts +42 -0
  138. package/tests/tools/transactions.test.d.ts +2 -0
  139. package/tests/tools/transactions.test.d.ts.map +1 -0
  140. package/tests/tools/transactions.test.js +67 -0
  141. package/tests/tools/transactions.test.js.map +1 -0
  142. package/tests/tools/transactions.test.ts +82 -0
  143. package/tsconfig.json +52 -0
  144. package/vitest.config.d.ts +3 -0
  145. package/vitest.config.d.ts.map +1 -0
  146. package/vitest.config.js +14 -0
  147. package/vitest.config.js.map +1 -0
  148. package/vitest.config.ts +14 -0
@@ -0,0 +1,115 @@
1
+ # Feature Specification: [FEATURE NAME]
2
+
3
+ **Feature Branch**: `[###-feature-name]`
4
+ **Created**: [DATE]
5
+ **Status**: Draft
6
+ **Input**: User description: "$ARGUMENTS"
7
+
8
+ ## User Scenarios & Testing *(mandatory)*
9
+
10
+ <!--
11
+ IMPORTANT: User stories should be PRIORITIZED as user journeys ordered by importance.
12
+ Each user story/journey must be INDEPENDENTLY TESTABLE - meaning if you implement just ONE of them,
13
+ you should still have a viable MVP (Minimum Viable Product) that delivers value.
14
+
15
+ Assign priorities (P1, P2, P3, etc.) to each story, where P1 is the most critical.
16
+ Think of each story as a standalone slice of functionality that can be:
17
+ - Developed independently
18
+ - Tested independently
19
+ - Deployed independently
20
+ - Demonstrated to users independently
21
+ -->
22
+
23
+ ### User Story 1 - [Brief Title] (Priority: P1)
24
+
25
+ [Describe this user journey in plain language]
26
+
27
+ **Why this priority**: [Explain the value and why it has this priority level]
28
+
29
+ **Independent Test**: [Describe how this can be tested independently - e.g., "Can be fully tested by [specific action] and delivers [specific value]"]
30
+
31
+ **Acceptance Scenarios**:
32
+
33
+ 1. **Given** [initial state], **When** [action], **Then** [expected outcome]
34
+ 2. **Given** [initial state], **When** [action], **Then** [expected outcome]
35
+
36
+ ---
37
+
38
+ ### User Story 2 - [Brief Title] (Priority: P2)
39
+
40
+ [Describe this user journey in plain language]
41
+
42
+ **Why this priority**: [Explain the value and why it has this priority level]
43
+
44
+ **Independent Test**: [Describe how this can be tested independently]
45
+
46
+ **Acceptance Scenarios**:
47
+
48
+ 1. **Given** [initial state], **When** [action], **Then** [expected outcome]
49
+
50
+ ---
51
+
52
+ ### User Story 3 - [Brief Title] (Priority: P3)
53
+
54
+ [Describe this user journey in plain language]
55
+
56
+ **Why this priority**: [Explain the value and why it has this priority level]
57
+
58
+ **Independent Test**: [Describe how this can be tested independently]
59
+
60
+ **Acceptance Scenarios**:
61
+
62
+ 1. **Given** [initial state], **When** [action], **Then** [expected outcome]
63
+
64
+ ---
65
+
66
+ [Add more user stories as needed, each with an assigned priority]
67
+
68
+ ### Edge Cases
69
+
70
+ <!--
71
+ ACTION REQUIRED: The content in this section represents placeholders.
72
+ Fill them out with the right edge cases.
73
+ -->
74
+
75
+ - What happens when [boundary condition]?
76
+ - How does system handle [error scenario]?
77
+
78
+ ## Requirements *(mandatory)*
79
+
80
+ <!--
81
+ ACTION REQUIRED: The content in this section represents placeholders.
82
+ Fill them out with the right functional requirements.
83
+ -->
84
+
85
+ ### Functional Requirements
86
+
87
+ - **FR-001**: System MUST [specific capability, e.g., "allow users to create accounts"]
88
+ - **FR-002**: System MUST [specific capability, e.g., "validate email addresses"]
89
+ - **FR-003**: Users MUST be able to [key interaction, e.g., "reset their password"]
90
+ - **FR-004**: System MUST [data requirement, e.g., "persist user preferences"]
91
+ - **FR-005**: System MUST [behavior, e.g., "log all security events"]
92
+
93
+ *Example of marking unclear requirements:*
94
+
95
+ - **FR-006**: System MUST authenticate users via [NEEDS CLARIFICATION: auth method not specified - email/password, SSO, OAuth?]
96
+ - **FR-007**: System MUST retain user data for [NEEDS CLARIFICATION: retention period not specified]
97
+
98
+ ### Key Entities *(include if feature involves data)*
99
+
100
+ - **[Entity 1]**: [What it represents, key attributes without implementation]
101
+ - **[Entity 2]**: [What it represents, relationships to other entities]
102
+
103
+ ## Success Criteria *(mandatory)*
104
+
105
+ <!--
106
+ ACTION REQUIRED: Define measurable success criteria.
107
+ These must be technology-agnostic and measurable.
108
+ -->
109
+
110
+ ### Measurable Outcomes
111
+
112
+ - **SC-001**: [Measurable metric, e.g., "Users can complete account creation in under 2 minutes"]
113
+ - **SC-002**: [Measurable metric, e.g., "System handles 1000 concurrent users without degradation"]
114
+ - **SC-003**: [User satisfaction metric, e.g., "90% of users successfully complete primary task on first attempt"]
115
+ - **SC-004**: [Business metric, e.g., "Reduce support tickets related to [X] by 50%"]
@@ -0,0 +1,251 @@
1
+ ---
2
+
3
+ description: "Task list template for feature implementation"
4
+ ---
5
+
6
+ # Tasks: [FEATURE NAME]
7
+
8
+ **Input**: Design documents from `/specs/[###-feature-name]/`
9
+ **Prerequisites**: plan.md (required), spec.md (required for user stories), research.md, data-model.md, contracts/
10
+
11
+ **Tests**: The examples below include test tasks. Tests are OPTIONAL - only include them if explicitly requested in the feature specification.
12
+
13
+ **Organization**: Tasks are grouped by user story to enable independent implementation and testing of each story.
14
+
15
+ ## Format: `[ID] [P?] [Story] Description`
16
+
17
+ - **[P]**: Can run in parallel (different files, no dependencies)
18
+ - **[Story]**: Which user story this task belongs to (e.g., US1, US2, US3)
19
+ - Include exact file paths in descriptions
20
+
21
+ ## Path Conventions
22
+
23
+ - **Single project**: `src/`, `tests/` at repository root
24
+ - **Web app**: `backend/src/`, `frontend/src/`
25
+ - **Mobile**: `api/src/`, `ios/src/` or `android/src/`
26
+ - Paths shown below assume single project - adjust based on plan.md structure
27
+
28
+ <!--
29
+ ============================================================================
30
+ IMPORTANT: The tasks below are SAMPLE TASKS for illustration purposes only.
31
+
32
+ The /speckit.tasks command MUST replace these with actual tasks based on:
33
+ - User stories from spec.md (with their priorities P1, P2, P3...)
34
+ - Feature requirements from plan.md
35
+ - Entities from data-model.md
36
+ - Endpoints from contracts/
37
+
38
+ Tasks MUST be organized by user story so each story can be:
39
+ - Implemented independently
40
+ - Tested independently
41
+ - Delivered as an MVP increment
42
+
43
+ DO NOT keep these sample tasks in the generated tasks.md file.
44
+ ============================================================================
45
+ -->
46
+
47
+ ## Phase 1: Setup (Shared Infrastructure)
48
+
49
+ **Purpose**: Project initialization and basic structure
50
+
51
+ - [ ] T001 Create project structure per implementation plan
52
+ - [ ] T002 Initialize [language] project with [framework] dependencies
53
+ - [ ] T003 [P] Configure linting and formatting tools
54
+
55
+ ---
56
+
57
+ ## Phase 2: Foundational (Blocking Prerequisites)
58
+
59
+ **Purpose**: Core infrastructure that MUST be complete before ANY user story can be implemented
60
+
61
+ **⚠️ CRITICAL**: No user story work can begin until this phase is complete
62
+
63
+ Examples of foundational tasks (adjust based on your project):
64
+
65
+ - [ ] T004 Setup database schema and migrations framework
66
+ - [ ] T005 [P] Implement authentication/authorization framework
67
+ - [ ] T006 [P] Setup API routing and middleware structure
68
+ - [ ] T007 Create base models/entities that all stories depend on
69
+ - [ ] T008 Configure error handling and logging infrastructure
70
+ - [ ] T009 Setup environment configuration management
71
+
72
+ **Checkpoint**: Foundation ready - user story implementation can now begin in parallel
73
+
74
+ ---
75
+
76
+ ## Phase 3: User Story 1 - [Title] (Priority: P1) 🎯 MVP
77
+
78
+ **Goal**: [Brief description of what this story delivers]
79
+
80
+ **Independent Test**: [How to verify this story works on its own]
81
+
82
+ ### Tests for User Story 1 (OPTIONAL - only if tests requested) ⚠️
83
+
84
+ > **NOTE: Write these tests FIRST, ensure they FAIL before implementation**
85
+
86
+ - [ ] T010 [P] [US1] Contract test for [endpoint] in tests/contract/test_[name].py
87
+ - [ ] T011 [P] [US1] Integration test for [user journey] in tests/integration/test_[name].py
88
+
89
+ ### Implementation for User Story 1
90
+
91
+ - [ ] T012 [P] [US1] Create [Entity1] model in src/models/[entity1].py
92
+ - [ ] T013 [P] [US1] Create [Entity2] model in src/models/[entity2].py
93
+ - [ ] T014 [US1] Implement [Service] in src/services/[service].py (depends on T012, T013)
94
+ - [ ] T015 [US1] Implement [endpoint/feature] in src/[location]/[file].py
95
+ - [ ] T016 [US1] Add validation and error handling
96
+ - [ ] T017 [US1] Add logging for user story 1 operations
97
+
98
+ **Checkpoint**: At this point, User Story 1 should be fully functional and testable independently
99
+
100
+ ---
101
+
102
+ ## Phase 4: User Story 2 - [Title] (Priority: P2)
103
+
104
+ **Goal**: [Brief description of what this story delivers]
105
+
106
+ **Independent Test**: [How to verify this story works on its own]
107
+
108
+ ### Tests for User Story 2 (OPTIONAL - only if tests requested) ⚠️
109
+
110
+ - [ ] T018 [P] [US2] Contract test for [endpoint] in tests/contract/test_[name].py
111
+ - [ ] T019 [P] [US2] Integration test for [user journey] in tests/integration/test_[name].py
112
+
113
+ ### Implementation for User Story 2
114
+
115
+ - [ ] T020 [P] [US2] Create [Entity] model in src/models/[entity].py
116
+ - [ ] T021 [US2] Implement [Service] in src/services/[service].py
117
+ - [ ] T022 [US2] Implement [endpoint/feature] in src/[location]/[file].py
118
+ - [ ] T023 [US2] Integrate with User Story 1 components (if needed)
119
+
120
+ **Checkpoint**: At this point, User Stories 1 AND 2 should both work independently
121
+
122
+ ---
123
+
124
+ ## Phase 5: User Story 3 - [Title] (Priority: P3)
125
+
126
+ **Goal**: [Brief description of what this story delivers]
127
+
128
+ **Independent Test**: [How to verify this story works on its own]
129
+
130
+ ### Tests for User Story 3 (OPTIONAL - only if tests requested) ⚠️
131
+
132
+ - [ ] T024 [P] [US3] Contract test for [endpoint] in tests/contract/test_[name].py
133
+ - [ ] T025 [P] [US3] Integration test for [user journey] in tests/integration/test_[name].py
134
+
135
+ ### Implementation for User Story 3
136
+
137
+ - [ ] T026 [P] [US3] Create [Entity] model in src/models/[entity].py
138
+ - [ ] T027 [US3] Implement [Service] in src/services/[service].py
139
+ - [ ] T028 [US3] Implement [endpoint/feature] in src/[location]/[file].py
140
+
141
+ **Checkpoint**: All user stories should now be independently functional
142
+
143
+ ---
144
+
145
+ [Add more user story phases as needed, following the same pattern]
146
+
147
+ ---
148
+
149
+ ## Phase N: Polish & Cross-Cutting Concerns
150
+
151
+ **Purpose**: Improvements that affect multiple user stories
152
+
153
+ - [ ] TXXX [P] Documentation updates in docs/
154
+ - [ ] TXXX Code cleanup and refactoring
155
+ - [ ] TXXX Performance optimization across all stories
156
+ - [ ] TXXX [P] Additional unit tests (if requested) in tests/unit/
157
+ - [ ] TXXX Security hardening
158
+ - [ ] TXXX Run quickstart.md validation
159
+
160
+ ---
161
+
162
+ ## Dependencies & Execution Order
163
+
164
+ ### Phase Dependencies
165
+
166
+ - **Setup (Phase 1)**: No dependencies - can start immediately
167
+ - **Foundational (Phase 2)**: Depends on Setup completion - BLOCKS all user stories
168
+ - **User Stories (Phase 3+)**: All depend on Foundational phase completion
169
+ - User stories can then proceed in parallel (if staffed)
170
+ - Or sequentially in priority order (P1 → P2 → P3)
171
+ - **Polish (Final Phase)**: Depends on all desired user stories being complete
172
+
173
+ ### User Story Dependencies
174
+
175
+ - **User Story 1 (P1)**: Can start after Foundational (Phase 2) - No dependencies on other stories
176
+ - **User Story 2 (P2)**: Can start after Foundational (Phase 2) - May integrate with US1 but should be independently testable
177
+ - **User Story 3 (P3)**: Can start after Foundational (Phase 2) - May integrate with US1/US2 but should be independently testable
178
+
179
+ ### Within Each User Story
180
+
181
+ - Tests (if included) MUST be written and FAIL before implementation
182
+ - Models before services
183
+ - Services before endpoints
184
+ - Core implementation before integration
185
+ - Story complete before moving to next priority
186
+
187
+ ### Parallel Opportunities
188
+
189
+ - All Setup tasks marked [P] can run in parallel
190
+ - All Foundational tasks marked [P] can run in parallel (within Phase 2)
191
+ - Once Foundational phase completes, all user stories can start in parallel (if team capacity allows)
192
+ - All tests for a user story marked [P] can run in parallel
193
+ - Models within a story marked [P] can run in parallel
194
+ - Different user stories can be worked on in parallel by different team members
195
+
196
+ ---
197
+
198
+ ## Parallel Example: User Story 1
199
+
200
+ ```bash
201
+ # Launch all tests for User Story 1 together (if tests requested):
202
+ Task: "Contract test for [endpoint] in tests/contract/test_[name].py"
203
+ Task: "Integration test for [user journey] in tests/integration/test_[name].py"
204
+
205
+ # Launch all models for User Story 1 together:
206
+ Task: "Create [Entity1] model in src/models/[entity1].py"
207
+ Task: "Create [Entity2] model in src/models/[entity2].py"
208
+ ```
209
+
210
+ ---
211
+
212
+ ## Implementation Strategy
213
+
214
+ ### MVP First (User Story 1 Only)
215
+
216
+ 1. Complete Phase 1: Setup
217
+ 2. Complete Phase 2: Foundational (CRITICAL - blocks all stories)
218
+ 3. Complete Phase 3: User Story 1
219
+ 4. **STOP and VALIDATE**: Test User Story 1 independently
220
+ 5. Deploy/demo if ready
221
+
222
+ ### Incremental Delivery
223
+
224
+ 1. Complete Setup + Foundational → Foundation ready
225
+ 2. Add User Story 1 → Test independently → Deploy/Demo (MVP!)
226
+ 3. Add User Story 2 → Test independently → Deploy/Demo
227
+ 4. Add User Story 3 → Test independently → Deploy/Demo
228
+ 5. Each story adds value without breaking previous stories
229
+
230
+ ### Parallel Team Strategy
231
+
232
+ With multiple developers:
233
+
234
+ 1. Team completes Setup + Foundational together
235
+ 2. Once Foundational is done:
236
+ - Developer A: User Story 1
237
+ - Developer B: User Story 2
238
+ - Developer C: User Story 3
239
+ 3. Stories complete and integrate independently
240
+
241
+ ---
242
+
243
+ ## Notes
244
+
245
+ - [P] tasks = different files, no dependencies
246
+ - [Story] label maps task to specific user story for traceability
247
+ - Each user story should be independently completable and testable
248
+ - Verify tests fail before implementing
249
+ - Commit after each task or logical group
250
+ - Stop at any checkpoint to validate story independently
251
+ - Avoid: vague tasks, same file conflicts, cross-story dependencies that break independence
@@ -0,0 +1,14 @@
1
+ {
2
+ "version": "0.2.0",
3
+ "configurations": [
4
+ {
5
+ "type": "node",
6
+ "request": "launch",
7
+ "name": "Launch Program",
8
+ "skipFiles": ["<node_internals>/**"],
9
+ "program": "${workspaceFolder}/src/index.ts",
10
+ "preLaunchTask": "build",
11
+ "outFiles": ["${workspaceFolder}/dist/**/*.js"]
12
+ }
13
+ ]
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "chat.promptFilesRecommendations": {
3
+ "speckit.constitution": true,
4
+ "speckit.specify": true,
5
+ "speckit.plan": true,
6
+ "speckit.tasks": true,
7
+ "speckit.implement": true
8
+ },
9
+ "chat.tools.terminal.autoApprove": {
10
+ ".specify/scripts/bash/": true,
11
+ ".specify/scripts/powershell/": true
12
+ }
13
+ }
14
+
@@ -0,0 +1,15 @@
1
+ {
2
+ "version": "2.0.0",
3
+ "tasks": [
4
+ {
5
+ "label": "build",
6
+ "type": "shell",
7
+ "command": "npm run build",
8
+ "isBackground": false,
9
+ "problemMatcher": [
10
+ "$tsc"
11
+ ],
12
+ "group": "build"
13
+ }
14
+ ]
15
+ }
package/README.md ADDED
@@ -0,0 +1,151 @@
1
+
2
+ # Quantix Personal Finance MCP Server
3
+
4
+ MCP (Model Context Protocol) server for the Quantix Personal Finance API. Exposes all endpoints for categories, credit cards, transactions, and summaries as MCP tools, with full input validation and modular architecture.
5
+
6
+ ## Features
7
+
8
+ - **Accounts**: Manage bank accounts, wallets, and investments.
9
+ - **Categories**: Create, list, update, and delete financial categories.
10
+ - **Credit Cards**: Manage cards, view/pay statements, and track statement status.
11
+ - **Transactions**: Full CRUD for transactions including recurring payments and installment handling.
12
+ - **Details**: Mark transactions as paid/unpaid.
13
+ - **Settings**: Manage global user preferences (currency, language, etc.).
14
+ - **Summary**: Get monthly financial summaries.
15
+
16
+ All tool inputs are validated using [Zod](https://zod.dev/) schemas matching the OpenAPI spec.
17
+
18
+ ## Prerequisites
19
+
20
+ - Node.js (v18 or higher)
21
+ - npm
22
+ - Access to Quantix API and API Key
23
+
24
+ ## Installation
25
+
26
+ 1. Clone or navigate to the project repository.
27
+ 2. Install dependencies:
28
+
29
+ ```bash
30
+ npm install
31
+ ```
32
+
33
+ ## Configuration
34
+
35
+ Create a `.env` file in the project root:
36
+
37
+ ```env
38
+ QUANTIX_API_URL=https://api.quantix.example.com
39
+ QUANTIX_API_KEY=your_api_key_here
40
+ MCPPORT=3001
41
+ ```
42
+
43
+ ## Building the Project
44
+
45
+ Compile the TypeScript code to JavaScript:
46
+
47
+ ```bash
48
+ npm run build
49
+ ```
50
+
51
+ The compiled output will be in the `dist` directory.
52
+
53
+ ## Usage
54
+
55
+ ### Development
56
+
57
+ Run the server in development mode (with hot reload):
58
+
59
+ ```bash
60
+ npm run dev
61
+ ```
62
+
63
+ ### Production
64
+
65
+ ```bash
66
+ npm start
67
+ ```
68
+
69
+ ### MCP Inspector (Recommended for Testing)
70
+
71
+ 1. Build the project:
72
+ ```bash
73
+ npm run build
74
+ ```
75
+ 2. Run the inspector:
76
+ ```bash
77
+ npx @modelcontextprotocol/inspector node dist/index.js
78
+ ```
79
+ 3. Open the provided URL to interact with your server.
80
+
81
+ ## Exposed MCP Tools
82
+
83
+ | Category | Tool Name | Description |
84
+ |----------|-----------|-------------|
85
+ | **Accounts** | `create_account` | Create a new financial account |
86
+ | | `get_accounts` | List all accounts with balances |
87
+ | | `get_account` | Get details of a specific account |
88
+ | | `update_account` | Update an existing account |
89
+ | | `delete_account` | Delete an account |
90
+ | | `get_account_balance` | Get current balance for an account |
91
+ | | `get_account_transactions` | Get transactions linked to an account |
92
+ | **Categories** | `create_category` | Create a new financial category |
93
+ | | `get_categories` | List all categories |
94
+ | | `get_category` | Get a category by ID |
95
+ | | `update_category` | Update a category |
96
+ | | `delete_category` | Delete a category |
97
+ | **Credit Cards** | `create_credit_card` | Create a new credit card |
98
+ | | `get_credit_cards` | List all credit cards |
99
+ | | `get_credit_card` | Get a credit card by ID |
100
+ | | `update_credit_card` | Update a credit card |
101
+ | | `delete_credit_card` | Delete a credit card |
102
+ | | `get_statement` | Get statement for a specific month |
103
+ | | `get_statement_status` | Get payment status of a statement |
104
+ | | `pay_statement` | Mark statement transactions as paid |
105
+ | **Transactions** | `create_transaction` | Record a new transaction |
106
+ | | `get_transactions` | List transactions (optional month filter) |
107
+ | | `get_transaction` | Get transaction details |
108
+ | | `update_transaction` | Update transaction (supports recurring) |
109
+ | | `pay_transaction` | Mark transaction as paid |
110
+ | | `unpay_transaction` | Mark transaction as unpaid |
111
+ | | `delete_transaction` | Delete transaction (supports recurring) |
112
+ | **Settings** | `create_settings` | Create global user settings |
113
+ | | `get_settings` | Get global settings |
114
+ | | `update_settings` | Update global settings |
115
+ | **Summary** | `get_summary` | Get monthly financial summary |
116
+
117
+ See the OpenAPI spec in `specs/001-mcp-api-integration/contracts/openapi.yaml` for detailed schemas.
118
+
119
+ ## Setup with Claude Desktop
120
+
121
+ 1. Locate your Claude Desktop configuration file:
122
+ - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
123
+ - Windows: `%APPDATA%\Claude\claude_desktop_config.json`
124
+ 2. Add the server configuration:
125
+
126
+ ```json
127
+ {
128
+ "mcpServers": {
129
+ "quantix": {
130
+ "command": "node",
131
+ "args": ["/absolute/path/to/dist/index.js"],
132
+ "env": {
133
+ "QUANTIX_API_URL": "https://api.quantix.example.com",
134
+ "QUANTIX_API_KEY": "your_api_key_here"
135
+ }
136
+ }
137
+ }
138
+ }
139
+ ```
140
+
141
+ ## Testing
142
+
143
+ Run all tests:
144
+
145
+ ```bash
146
+ npm test
147
+ ```
148
+
149
+ ## License
150
+
151
+ ISC
@@ -0,0 +1,8 @@
1
+ import 'dotenv/config';
2
+ export declare const config: {
3
+ QUANTIX_API_URL: string;
4
+ QUANTIX_API_KEY: string;
5
+ MCPPORT: string;
6
+ NODE_ENV: "development" | "production" | "test";
7
+ };
8
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AA8BvB,eAAO,MAAM,MAAM;;;;;CAKlB,CAAC"}
package/dist/config.js ADDED
@@ -0,0 +1,31 @@
1
+ import 'dotenv/config';
2
+ import * as z from 'zod';
3
+ const envSchema = z.object({
4
+ QUANTIX_API_URL: z.string().default('https://api.quantix.example.com'),
5
+ QUANTIX_API_KEY: z.string().min(1, "QUANTIX_API_KEY is required"),
6
+ MCPPORT: z.string().optional().default('3001'),
7
+ NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
8
+ });
9
+ const processEnv = {
10
+ QUANTIX_API_URL: process.env.QUANTIX_API_URL,
11
+ QUANTIX_API_KEY: process.env.QUANTIX_API_KEY,
12
+ MCPPORT: process.env.MCPPORT,
13
+ NODE_ENV: process.env.NODE_ENV,
14
+ };
15
+ // Parse and validate environment variables
16
+ const parsedEnv = envSchema.safeParse(processEnv);
17
+ if (!parsedEnv.success) {
18
+ console.error("❌ Invalid environment variables:", parsedEnv.error.format());
19
+ // In a real app, we might want to throw here, but for now we'll just log
20
+ // and let the application fail when it tries to use the missing keys if essential
21
+ if (process.env.NODE_ENV !== 'test') {
22
+ // Allow tests to run without all env vars if they mock config
23
+ }
24
+ }
25
+ export const config = parsedEnv.success ? parsedEnv.data : {
26
+ QUANTIX_API_URL: process.env.QUANTIX_API_URL || 'https://api.quantix.example.com',
27
+ QUANTIX_API_KEY: process.env.QUANTIX_API_KEY || 'your_api_key_here',
28
+ MCPPORT: process.env.MCPPORT || '3001',
29
+ NODE_ENV: process.env.NODE_ENV || 'development'
30
+ };
31
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IACzB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC;IACtE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,6BAA6B,CAAC;IACjE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IAC9C,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;CAC/E,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG;IACjB,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;IAC5C,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;IAC5C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;IAC5B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;CAC/B,CAAC;AAEF,2CAA2C;AAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAElD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IACvB,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAE5E,yEAAyE;IACzE,kFAAkF;IAClF,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAClC,8DAA8D;IAClE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,iCAAiC;IACjF,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,mBAAmB;IACnE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM;IACtC,QAAQ,EAAG,OAAO,CAAC,GAAG,CAAC,QAAkD,IAAI,aAAa;CAC7F,CAAC"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ export declare function getServer(): McpServer;
4
+ declare const app: import("express-serve-static-core").Express;
5
+ export { app };
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAapE,wBAAgB,SAAS,cAiBxB;AAED,QAAA,MAAM,GAAG,6CAAY,CAAC;AA0BtB,OAAO,EAAE,GAAG,EAAE,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
4
+ import express, {} from 'express';
5
+ import { config } from './config.js';
6
+ import { z } from 'zod';
7
+ import { registerCategoryTools } from './tools/categories.js';
8
+ import { registerCreditCardTools } from './tools/credit-cards.js';
9
+ import { registerTransactionTools } from './tools/transactions.js';
10
+ import { registerSummaryTools } from './tools/summary.js';
11
+ import { registerAccountTools } from './tools/accounts.js';
12
+ import { registerSettingsTools } from './tools/settings.js';
13
+ export function getServer() {
14
+ const mcpServer = new McpServer({
15
+ name: 'quantix_mcp_server',
16
+ version: '1.0.0'
17
+ });
18
+ console.log('McpServer started');
19
+ // Register Tools here
20
+ registerCategoryTools(mcpServer);
21
+ registerCreditCardTools(mcpServer);
22
+ registerTransactionTools(mcpServer);
23
+ registerSummaryTools(mcpServer);
24
+ registerAccountTools(mcpServer);
25
+ registerSettingsTools(mcpServer);
26
+ return mcpServer;
27
+ }
28
+ const app = express();
29
+ app.use(express.json());
30
+ app.post('/mcp', async (req, res) => {
31
+ const mcpServer = getServer();
32
+ const transport = new StreamableHTTPServerTransport({});
33
+ const mcpTransport = transport;
34
+ res.on('close', () => {
35
+ transport.close();
36
+ mcpServer.close();
37
+ });
38
+ await mcpServer.connect(mcpTransport);
39
+ await transport.handleRequest(req, res, req.body);
40
+ });
41
+ if (config.NODE_ENV !== 'test') {
42
+ const MCPPORT = config.MCPPORT;
43
+ app.listen(MCPPORT, () => {
44
+ console.log(`MCP server is running on http://localhost:${MCPPORT}/mcp`);
45
+ });
46
+ }
47
+ export { app };
48
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAEnG,OAAO,OAAO,EAAE,EAA+B,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,UAAU,SAAS;IACrB,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC;QAC5B,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,OAAO;KACnB,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAEjC,sBAAsB;IACtB,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACjC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACnC,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACpC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAChC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAChC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAEjC,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AACtB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAExB,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACnD,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC;IAE9B,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC,EACnD,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,SAAiC,CAAC;IAEvD,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACjB,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,SAAS,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACtC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AAEH,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,OAAO,CAAC,GAAG,CAAC,6CAA6C,OAAO,MAAM,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACP,CAAC;AAED,OAAO,EAAE,GAAG,EAAE,CAAC"}