hirebase-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.
Files changed (227) hide show
  1. package/README.md +133 -0
  2. package/dist/application/dto/candidate-summary.d.ts +10 -0
  3. package/dist/application/dto/candidate-summary.js +2 -0
  4. package/dist/application/dto/candidate-summary.js.map +1 -0
  5. package/dist/application/dto/extracted-cv.d.ts +43 -0
  6. package/dist/application/dto/extracted-cv.js +2 -0
  7. package/dist/application/dto/extracted-cv.js.map +1 -0
  8. package/dist/application/dto/filter-input.d.ts +7 -0
  9. package/dist/application/dto/filter-input.js +2 -0
  10. package/dist/application/dto/filter-input.js.map +1 -0
  11. package/dist/application/dto/index.d.ts +5 -0
  12. package/dist/application/dto/index.js +2 -0
  13. package/dist/application/dto/index.js.map +1 -0
  14. package/dist/application/dto/search-results.d.ts +13 -0
  15. package/dist/application/dto/search-results.js +2 -0
  16. package/dist/application/dto/search-results.js.map +1 -0
  17. package/dist/application/dto/stats.d.ts +8 -0
  18. package/dist/application/dto/stats.js +2 -0
  19. package/dist/application/dto/stats.js.map +1 -0
  20. package/dist/application/ports/document-parser.d.ts +8 -0
  21. package/dist/application/ports/document-parser.js +2 -0
  22. package/dist/application/ports/document-parser.js.map +1 -0
  23. package/dist/application/ports/embedding-service.d.ts +4 -0
  24. package/dist/application/ports/embedding-service.js +2 -0
  25. package/dist/application/ports/embedding-service.js.map +1 -0
  26. package/dist/application/ports/export-service.d.ts +5 -0
  27. package/dist/application/ports/export-service.js +2 -0
  28. package/dist/application/ports/export-service.js.map +1 -0
  29. package/dist/application/ports/index.d.ts +4 -0
  30. package/dist/application/ports/index.js +2 -0
  31. package/dist/application/ports/index.js.map +1 -0
  32. package/dist/application/ports/structured-extractor.d.ts +4 -0
  33. package/dist/application/ports/structured-extractor.js +2 -0
  34. package/dist/application/ports/structured-extractor.js.map +1 -0
  35. package/dist/application/use-cases/add-cv.d.ts +15 -0
  36. package/dist/application/use-cases/add-cv.js +88 -0
  37. package/dist/application/use-cases/add-cv.js.map +1 -0
  38. package/dist/application/use-cases/bulk-add-cvs.d.ts +14 -0
  39. package/dist/application/use-cases/bulk-add-cvs.js +32 -0
  40. package/dist/application/use-cases/bulk-add-cvs.js.map +1 -0
  41. package/dist/application/use-cases/delete-cv.d.ts +10 -0
  42. package/dist/application/use-cases/delete-cv.js +21 -0
  43. package/dist/application/use-cases/delete-cv.js.map +1 -0
  44. package/dist/application/use-cases/export-results.d.ts +9 -0
  45. package/dist/application/use-cases/export-results.js +21 -0
  46. package/dist/application/use-cases/export-results.js.map +1 -0
  47. package/dist/application/use-cases/filter-candidates.d.ts +9 -0
  48. package/dist/application/use-cases/filter-candidates.js +51 -0
  49. package/dist/application/use-cases/filter-candidates.js.map +1 -0
  50. package/dist/application/use-cases/get-cv-chunks.d.ts +15 -0
  51. package/dist/application/use-cases/get-cv-chunks.js +18 -0
  52. package/dist/application/use-cases/get-cv-chunks.js.map +1 -0
  53. package/dist/application/use-cases/get-cv-detail.d.ts +7 -0
  54. package/dist/application/use-cases/get-cv-detail.js +15 -0
  55. package/dist/application/use-cases/get-cv-detail.js.map +1 -0
  56. package/dist/application/use-cases/get-cv-versions.d.ts +9 -0
  57. package/dist/application/use-cases/get-cv-versions.js +18 -0
  58. package/dist/application/use-cases/get-cv-versions.js.map +1 -0
  59. package/dist/application/use-cases/get-stats.d.ts +9 -0
  60. package/dist/application/use-cases/get-stats.js +42 -0
  61. package/dist/application/use-cases/get-stats.js.map +1 -0
  62. package/dist/application/use-cases/index.d.ts +13 -0
  63. package/dist/application/use-cases/index.js +14 -0
  64. package/dist/application/use-cases/index.js.map +1 -0
  65. package/dist/application/use-cases/list-cvs.d.ts +8 -0
  66. package/dist/application/use-cases/list-cvs.js +20 -0
  67. package/dist/application/use-cases/list-cvs.js.map +1 -0
  68. package/dist/application/use-cases/manage-tags.d.ts +7 -0
  69. package/dist/application/use-cases/manage-tags.js +36 -0
  70. package/dist/application/use-cases/manage-tags.js.map +1 -0
  71. package/dist/application/use-cases/semantic-search.d.ts +11 -0
  72. package/dist/application/use-cases/semantic-search.js +40 -0
  73. package/dist/application/use-cases/semantic-search.js.map +1 -0
  74. package/dist/application/use-cases/update-cv.d.ts +17 -0
  75. package/dist/application/use-cases/update-cv.js +94 -0
  76. package/dist/application/use-cases/update-cv.js.map +1 -0
  77. package/dist/domain/entities/candidate.d.ts +22 -0
  78. package/dist/domain/entities/candidate.js +2 -0
  79. package/dist/domain/entities/candidate.js.map +1 -0
  80. package/dist/domain/entities/cv-chunk.d.ts +10 -0
  81. package/dist/domain/entities/cv-chunk.js +2 -0
  82. package/dist/domain/entities/cv-chunk.js.map +1 -0
  83. package/dist/domain/entities/cv-version.d.ts +7 -0
  84. package/dist/domain/entities/cv-version.js +2 -0
  85. package/dist/domain/entities/cv-version.js.map +1 -0
  86. package/dist/domain/entities/index.d.ts +3 -0
  87. package/dist/domain/entities/index.js +2 -0
  88. package/dist/domain/entities/index.js.map +1 -0
  89. package/dist/domain/repositories/candidate-repository.d.ts +12 -0
  90. package/dist/domain/repositories/candidate-repository.js +2 -0
  91. package/dist/domain/repositories/candidate-repository.js.map +1 -0
  92. package/dist/domain/repositories/chunk-repository.d.ts +13 -0
  93. package/dist/domain/repositories/chunk-repository.js +2 -0
  94. package/dist/domain/repositories/chunk-repository.js.map +1 -0
  95. package/dist/domain/repositories/index.d.ts +3 -0
  96. package/dist/domain/repositories/index.js +2 -0
  97. package/dist/domain/repositories/index.js.map +1 -0
  98. package/dist/domain/repositories/version-repository.d.ts +6 -0
  99. package/dist/domain/repositories/version-repository.js +2 -0
  100. package/dist/domain/repositories/version-repository.js.map +1 -0
  101. package/dist/domain/value-objects/certification.d.ts +5 -0
  102. package/dist/domain/value-objects/certification.js +2 -0
  103. package/dist/domain/value-objects/certification.js.map +1 -0
  104. package/dist/domain/value-objects/contact-info.d.ts +5 -0
  105. package/dist/domain/value-objects/contact-info.js +2 -0
  106. package/dist/domain/value-objects/contact-info.js.map +1 -0
  107. package/dist/domain/value-objects/education.d.ts +7 -0
  108. package/dist/domain/value-objects/education.js +2 -0
  109. package/dist/domain/value-objects/education.js.map +1 -0
  110. package/dist/domain/value-objects/experience.d.ts +7 -0
  111. package/dist/domain/value-objects/experience.js +2 -0
  112. package/dist/domain/value-objects/experience.js.map +1 -0
  113. package/dist/domain/value-objects/index.d.ts +7 -0
  114. package/dist/domain/value-objects/index.js +2 -0
  115. package/dist/domain/value-objects/index.js.map +1 -0
  116. package/dist/domain/value-objects/language.d.ts +4 -0
  117. package/dist/domain/value-objects/language.js +2 -0
  118. package/dist/domain/value-objects/language.js.map +1 -0
  119. package/dist/domain/value-objects/links.d.ts +6 -0
  120. package/dist/domain/value-objects/links.js +2 -0
  121. package/dist/domain/value-objects/links.js.map +1 -0
  122. package/dist/domain/value-objects/project.d.ts +5 -0
  123. package/dist/domain/value-objects/project.js +2 -0
  124. package/dist/domain/value-objects/project.js.map +1 -0
  125. package/dist/infrastructure/ai/index.d.ts +2 -0
  126. package/dist/infrastructure/ai/index.js +3 -0
  127. package/dist/infrastructure/ai/index.js.map +1 -0
  128. package/dist/infrastructure/ai/openai-embedding-service.d.ts +8 -0
  129. package/dist/infrastructure/ai/openai-embedding-service.js +39 -0
  130. package/dist/infrastructure/ai/openai-embedding-service.js.map +1 -0
  131. package/dist/infrastructure/ai/openai-structured-extractor.d.ts +9 -0
  132. package/dist/infrastructure/ai/openai-structured-extractor.js +117 -0
  133. package/dist/infrastructure/ai/openai-structured-extractor.js.map +1 -0
  134. package/dist/infrastructure/config/app-config.d.ts +7 -0
  135. package/dist/infrastructure/config/app-config.js +13 -0
  136. package/dist/infrastructure/config/app-config.js.map +1 -0
  137. package/dist/infrastructure/export/csv-export-service.d.ts +6 -0
  138. package/dist/infrastructure/export/csv-export-service.js +24 -0
  139. package/dist/infrastructure/export/csv-export-service.js.map +1 -0
  140. package/dist/infrastructure/parsers/docx-parser.d.ts +5 -0
  141. package/dist/infrastructure/parsers/docx-parser.js +17 -0
  142. package/dist/infrastructure/parsers/docx-parser.js.map +1 -0
  143. package/dist/infrastructure/parsers/index.d.ts +2 -0
  144. package/dist/infrastructure/parsers/index.js +3 -0
  145. package/dist/infrastructure/parsers/index.js.map +1 -0
  146. package/dist/infrastructure/parsers/pdf-parser.d.ts +5 -0
  147. package/dist/infrastructure/parsers/pdf-parser.js +20 -0
  148. package/dist/infrastructure/parsers/pdf-parser.js.map +1 -0
  149. package/dist/infrastructure/persistence/database.d.ts +12 -0
  150. package/dist/infrastructure/persistence/database.js +77 -0
  151. package/dist/infrastructure/persistence/database.js.map +1 -0
  152. package/dist/infrastructure/persistence/index.d.ts +4 -0
  153. package/dist/infrastructure/persistence/index.js +5 -0
  154. package/dist/infrastructure/persistence/index.js.map +1 -0
  155. package/dist/infrastructure/persistence/lancedb-candidate-repository.d.ts +20 -0
  156. package/dist/infrastructure/persistence/lancedb-candidate-repository.js +158 -0
  157. package/dist/infrastructure/persistence/lancedb-candidate-repository.js.map +1 -0
  158. package/dist/infrastructure/persistence/lancedb-chunk-repository.d.ts +17 -0
  159. package/dist/infrastructure/persistence/lancedb-chunk-repository.js +102 -0
  160. package/dist/infrastructure/persistence/lancedb-chunk-repository.js.map +1 -0
  161. package/dist/infrastructure/persistence/lancedb-version-repository.d.ts +12 -0
  162. package/dist/infrastructure/persistence/lancedb-version-repository.js +59 -0
  163. package/dist/infrastructure/persistence/lancedb-version-repository.js.map +1 -0
  164. package/dist/interface/cli/index.d.ts +2 -0
  165. package/dist/interface/cli/index.js +14 -0
  166. package/dist/interface/cli/index.js.map +1 -0
  167. package/dist/interface/mcp/server.d.ts +2 -0
  168. package/dist/interface/mcp/server.js +63 -0
  169. package/dist/interface/mcp/server.js.map +1 -0
  170. package/dist/interface/mcp/tools/add-cv.d.ts +3 -0
  171. package/dist/interface/mcp/tools/add-cv.js +20 -0
  172. package/dist/interface/mcp/tools/add-cv.js.map +1 -0
  173. package/dist/interface/mcp/tools/bulk-add-cvs.d.ts +3 -0
  174. package/dist/interface/mcp/tools/bulk-add-cvs.js +28 -0
  175. package/dist/interface/mcp/tools/bulk-add-cvs.js.map +1 -0
  176. package/dist/interface/mcp/tools/delete-cv.d.ts +3 -0
  177. package/dist/interface/mcp/tools/delete-cv.js +20 -0
  178. package/dist/interface/mcp/tools/delete-cv.js.map +1 -0
  179. package/dist/interface/mcp/tools/export-results.d.ts +3 -0
  180. package/dist/interface/mcp/tools/export-results.js +23 -0
  181. package/dist/interface/mcp/tools/export-results.js.map +1 -0
  182. package/dist/interface/mcp/tools/filter-candidates.d.ts +3 -0
  183. package/dist/interface/mcp/tools/filter-candidates.js +32 -0
  184. package/dist/interface/mcp/tools/filter-candidates.js.map +1 -0
  185. package/dist/interface/mcp/tools/get-cv-chunks.d.ts +3 -0
  186. package/dist/interface/mcp/tools/get-cv-chunks.js +26 -0
  187. package/dist/interface/mcp/tools/get-cv-chunks.js.map +1 -0
  188. package/dist/interface/mcp/tools/get-cv-detail.d.ts +3 -0
  189. package/dist/interface/mcp/tools/get-cv-detail.js +20 -0
  190. package/dist/interface/mcp/tools/get-cv-detail.js.map +1 -0
  191. package/dist/interface/mcp/tools/get-cv-versions.d.ts +3 -0
  192. package/dist/interface/mcp/tools/get-cv-versions.js +20 -0
  193. package/dist/interface/mcp/tools/get-cv-versions.js.map +1 -0
  194. package/dist/interface/mcp/tools/get-stats.d.ts +3 -0
  195. package/dist/interface/mcp/tools/get-stats.js +19 -0
  196. package/dist/interface/mcp/tools/get-stats.js.map +1 -0
  197. package/dist/interface/mcp/tools/list-cvs.d.ts +3 -0
  198. package/dist/interface/mcp/tools/list-cvs.js +32 -0
  199. package/dist/interface/mcp/tools/list-cvs.js.map +1 -0
  200. package/dist/interface/mcp/tools/manage-tags.d.ts +3 -0
  201. package/dist/interface/mcp/tools/manage-tags.js +24 -0
  202. package/dist/interface/mcp/tools/manage-tags.js.map +1 -0
  203. package/dist/interface/mcp/tools/semantic-search.d.ts +3 -0
  204. package/dist/interface/mcp/tools/semantic-search.js +27 -0
  205. package/dist/interface/mcp/tools/semantic-search.js.map +1 -0
  206. package/dist/interface/mcp/tools/update-cv.d.ts +3 -0
  207. package/dist/interface/mcp/tools/update-cv.js +23 -0
  208. package/dist/interface/mcp/tools/update-cv.js.map +1 -0
  209. package/dist/interface/mcp/types.d.ts +16 -0
  210. package/dist/interface/mcp/types.js +2 -0
  211. package/dist/interface/mcp/types.js.map +1 -0
  212. package/dist/shared/errors/index.d.ts +32 -0
  213. package/dist/shared/errors/index.js +56 -0
  214. package/dist/shared/errors/index.js.map +1 -0
  215. package/dist/shared/types/index.d.ts +19 -0
  216. package/dist/shared/types/index.js +2 -0
  217. package/dist/shared/types/index.js.map +1 -0
  218. package/dist/shared/utils/chunking.d.ts +3 -0
  219. package/dist/shared/utils/chunking.js +89 -0
  220. package/dist/shared/utils/chunking.js.map +1 -0
  221. package/dist/shared/utils/index.d.ts +2 -0
  222. package/dist/shared/utils/index.js +3 -0
  223. package/dist/shared/utils/index.js.map +1 -0
  224. package/dist/shared/utils/text.d.ts +5 -0
  225. package/dist/shared/utils/text.js +21 -0
  226. package/dist/shared/utils/text.js.map +1 -0
  227. package/package.json +61 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-results.js","sourceRoot":"","sources":["../../../../src/interface/mcp/tools/export-results.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AAIxF,MAAM,UAAU,yBAAyB,CAAC,MAAiB,EAAE,IAAkB;IAC7E,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAEjF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,8CAA8C,EAC9C;QACE,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QAC9E,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;KAC1D,EACD,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,MAAsB,CAAC,CAAC;YAC5E,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aACnD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC/F,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { Dependencies } from '../types.js';
3
+ export declare function registerFilterCandidatesTool(server: McpServer, deps: Dependencies): void;
@@ -0,0 +1,32 @@
1
+ import { z } from 'zod/v4';
2
+ import { FilterCandidatesUseCase } from '../../../application/use-cases/filter-candidates.js';
3
+ export function registerFilterCandidatesTool(server, deps) {
4
+ const useCase = new FilterCandidatesUseCase(deps.candidateRepo);
5
+ server.tool('filter_candidates', 'Filter candidates using structured criteria like skills, location, experience years, languages, and tags.', {
6
+ skills: z.array(z.string()).optional().describe('Required skills to filter by'),
7
+ location: z.string().optional().describe('Location to filter by (partial match)'),
8
+ min_experience_years: z.number().optional().describe('Minimum years of experience'),
9
+ languages: z.array(z.string()).optional().describe('Required languages'),
10
+ tags: z.array(z.string()).optional().describe('Required tags'),
11
+ }, async ({ skills, location, min_experience_years, languages, tags }) => {
12
+ try {
13
+ const results = await useCase.execute({
14
+ skills,
15
+ location,
16
+ minExperienceYears: min_experience_years,
17
+ languages,
18
+ tags,
19
+ });
20
+ return {
21
+ content: [{ type: 'text', text: JSON.stringify(results, null, 2) }],
22
+ };
23
+ }
24
+ catch (error) {
25
+ return {
26
+ content: [{ type: 'text', text: JSON.stringify({ error: error.message }) }],
27
+ isError: true,
28
+ };
29
+ }
30
+ });
31
+ }
32
+ //# sourceMappingURL=filter-candidates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-candidates.js","sourceRoot":"","sources":["../../../../src/interface/mcp/tools/filter-candidates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAG9F,MAAM,UAAU,4BAA4B,CAAC,MAAiB,EAAE,IAAkB;IAChF,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAEhE,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,2GAA2G,EAC3G;QACE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC/E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QACjF,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACnF,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACxE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;KAC/D,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE;QACpE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;gBACpC,MAAM;gBACN,QAAQ;gBACR,kBAAkB,EAAE,oBAAoB;gBACxC,SAAS;gBACT,IAAI;aACL,CAAC,CAAC;YACH,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC7E,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC/F,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { Dependencies } from '../types.js';
3
+ export declare function registerGetCvChunksTool(server: McpServer, deps: Dependencies): void;
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod/v4';
2
+ import { GetCvChunksUseCase } from '../../../application/use-cases/get-cv-chunks.js';
3
+ export function registerGetCvChunksTool(server, deps) {
4
+ const useCase = new GetCvChunksUseCase(deps.chunkRepo);
5
+ server.tool('get_cv_chunks', 'Get the text chunks (sections) of a specific candidate. Optionally filter by section type.', {
6
+ candidate_id: z.string().describe('ID of the candidate'),
7
+ section_type: z
8
+ .enum(['summary', 'experience', 'education', 'skills', 'projects', 'certifications', 'full'])
9
+ .optional()
10
+ .describe('Filter to a specific section type'),
11
+ }, async ({ candidate_id, section_type }) => {
12
+ try {
13
+ const chunks = await useCase.execute(candidate_id, section_type);
14
+ return {
15
+ content: [{ type: 'text', text: JSON.stringify(chunks, null, 2) }],
16
+ };
17
+ }
18
+ catch (error) {
19
+ return {
20
+ content: [{ type: 'text', text: JSON.stringify({ error: error.message }) }],
21
+ isError: true,
22
+ };
23
+ }
24
+ });
25
+ }
26
+ //# sourceMappingURL=get-cv-chunks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-cv-chunks.js","sourceRoot":"","sources":["../../../../src/interface/mcp/tools/get-cv-chunks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AAIrF,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,IAAkB;IAC3E,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEvD,MAAM,CAAC,IAAI,CACT,eAAe,EACf,4FAA4F,EAC5F;QACE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACxD,YAAY,EAAE,CAAC;aACZ,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;aAC5F,QAAQ,EAAE;aACV,QAAQ,CAAC,mCAAmC,CAAC;KACjD,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,EAAE;QACvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,YAAuC,CAAC,CAAC;YAC5F,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC5E,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC/F,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { Dependencies } from '../types.js';
3
+ export declare function registerGetCvDetailTool(server: McpServer, deps: Dependencies): void;
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod/v4';
2
+ import { GetCvDetailUseCase } from '../../../application/use-cases/get-cv-detail.js';
3
+ export function registerGetCvDetailTool(server, deps) {
4
+ const useCase = new GetCvDetailUseCase(deps.candidateRepo);
5
+ server.tool('get_cv_detail', 'Get the full structured data of a specific candidate by their ID.', { candidate_id: z.string().describe('ID of the candidate') }, async ({ candidate_id }) => {
6
+ try {
7
+ const candidate = await useCase.execute(candidate_id);
8
+ return {
9
+ content: [{ type: 'text', text: JSON.stringify(candidate, null, 2) }],
10
+ };
11
+ }
12
+ catch (error) {
13
+ return {
14
+ content: [{ type: 'text', text: JSON.stringify({ error: error.message }) }],
15
+ isError: true,
16
+ };
17
+ }
18
+ });
19
+ }
20
+ //# sourceMappingURL=get-cv-detail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-cv-detail.js","sourceRoot":"","sources":["../../../../src/interface/mcp/tools/get-cv-detail.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AAGrF,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,IAAkB;IAC3E,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAE3D,MAAM,CAAC,IAAI,CACT,eAAe,EACf,mEAAmE,EACnE,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,EAC5D,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACtD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC/E,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC/F,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { Dependencies } from '../types.js';
3
+ export declare function registerGetCvVersionsTool(server: McpServer, deps: Dependencies): void;
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod/v4';
2
+ import { GetCvVersionsUseCase } from '../../../application/use-cases/get-cv-versions.js';
3
+ export function registerGetCvVersionsTool(server, deps) {
4
+ const useCase = new GetCvVersionsUseCase(deps.candidateRepo, deps.versionRepo);
5
+ server.tool('get_cv_versions', 'Get the version history of a candidate. Shows previous versions of their CV data.', { candidate_id: z.string().describe('ID of the candidate') }, async ({ candidate_id }) => {
6
+ try {
7
+ const versions = await useCase.execute(candidate_id);
8
+ return {
9
+ content: [{ type: 'text', text: JSON.stringify(versions, null, 2) }],
10
+ };
11
+ }
12
+ catch (error) {
13
+ return {
14
+ content: [{ type: 'text', text: JSON.stringify({ error: error.message }) }],
15
+ isError: true,
16
+ };
17
+ }
18
+ });
19
+ }
20
+ //# sourceMappingURL=get-cv-versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-cv-versions.js","sourceRoot":"","sources":["../../../../src/interface/mcp/tools/get-cv-versions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,mDAAmD,CAAC;AAGzF,MAAM,UAAU,yBAAyB,CAAC,MAAiB,EAAE,IAAkB;IAC7E,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAE/E,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,mFAAmF,EACnF,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,EAC5D,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACrD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC9E,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC/F,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { Dependencies } from '../types.js';
3
+ export declare function registerGetStatsTool(server: McpServer, deps: Dependencies): void;
@@ -0,0 +1,19 @@
1
+ import { GetStatsUseCase } from '../../../application/use-cases/get-stats.js';
2
+ export function registerGetStatsTool(server, deps) {
3
+ const useCase = new GetStatsUseCase(deps.candidateRepo, deps.chunkRepo);
4
+ server.tool('get_stats', 'Get database statistics: total candidates, chunks, skill distribution, location counts, etc.', {}, async () => {
5
+ try {
6
+ const stats = await useCase.execute();
7
+ return {
8
+ content: [{ type: 'text', text: JSON.stringify(stats, null, 2) }],
9
+ };
10
+ }
11
+ catch (error) {
12
+ return {
13
+ content: [{ type: 'text', text: JSON.stringify({ error: error.message }) }],
14
+ isError: true,
15
+ };
16
+ }
17
+ });
18
+ }
19
+ //# sourceMappingURL=get-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-stats.js","sourceRoot":"","sources":["../../../../src/interface/mcp/tools/get-stats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAG9E,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,IAAkB;IACxE,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAExE,MAAM,CAAC,IAAI,CACT,WAAW,EACX,8FAA8F,EAC9F,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACtC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC3E,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC/F,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { Dependencies } from '../types.js';
3
+ export declare function registerListCvsTool(server: McpServer, deps: Dependencies): void;
@@ -0,0 +1,32 @@
1
+ import { z } from 'zod/v4';
2
+ import { ListCvsUseCase } from '../../../application/use-cases/list-cvs.js';
3
+ export function registerListCvsTool(server, deps) {
4
+ const useCase = new ListCvsUseCase(deps.candidateRepo);
5
+ server.tool('list_cvs', 'List all candidates in the database with optional pagination and sorting.', {
6
+ offset: z.number().optional().describe('Number of records to skip (default: 0)'),
7
+ limit: z.number().optional().describe('Maximum number of records to return (default: 50)'),
8
+ sort_by: z
9
+ .enum(['name', 'created_at', 'updated_at', 'experience_years'])
10
+ .optional()
11
+ .describe('Field to sort by'),
12
+ sort_order: z.enum(['asc', 'desc']).optional().describe('Sort direction'),
13
+ }, async ({ offset, limit, sort_by, sort_order }) => {
14
+ try {
15
+ const pagination = { offset: offset ?? 0, limit: limit ?? 50 };
16
+ const sort = sort_by
17
+ ? { field: sort_by, order: (sort_order ?? 'asc') }
18
+ : undefined;
19
+ const results = await useCase.execute(pagination, sort);
20
+ return {
21
+ content: [{ type: 'text', text: JSON.stringify(results, null, 2) }],
22
+ };
23
+ }
24
+ catch (error) {
25
+ return {
26
+ content: [{ type: 'text', text: JSON.stringify({ error: error.message }) }],
27
+ isError: true,
28
+ };
29
+ }
30
+ });
31
+ }
32
+ //# sourceMappingURL=list-cvs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-cvs.js","sourceRoot":"","sources":["../../../../src/interface/mcp/tools/list-cvs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAI5E,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,IAAkB;IACvE,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAEvD,MAAM,CAAC,IAAI,CACT,UAAU,EACV,2EAA2E,EAC3E;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;QAChF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QAC1F,OAAO,EAAE,CAAC;aACP,IAAI,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;aAC9D,QAAQ,EAAE;aACV,QAAQ,CAAC,kBAAkB,CAAC;QAC/B,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;KAC1E,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE;QAC/C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;YAC/D,MAAM,IAAI,GAAG,OAAO;gBAClB,CAAC,CAAC,EAAE,KAAK,EAAE,OAAoB,EAAE,KAAK,EAAE,CAAC,UAAU,IAAI,KAAK,CAAc,EAAE;gBAC5E,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACxD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC7E,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC/F,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { Dependencies } from '../types.js';
3
+ export declare function registerManageTagsTool(server: McpServer, deps: Dependencies): void;
@@ -0,0 +1,24 @@
1
+ import { z } from 'zod/v4';
2
+ import { ManageTagsUseCase } from '../../../application/use-cases/manage-tags.js';
3
+ export function registerManageTagsTool(server, deps) {
4
+ const useCase = new ManageTagsUseCase(deps.candidateRepo);
5
+ server.tool('manage_tags', 'Add, remove, or list tags for a candidate. Tags can be used for filtering.', {
6
+ candidate_id: z.string().describe('ID of the candidate'),
7
+ action: z.enum(['add', 'remove', 'list']).describe('Tag action to perform'),
8
+ tags: z.array(z.string()).optional().describe('Tags to add or remove (not needed for list action)'),
9
+ }, async ({ candidate_id, action, tags }) => {
10
+ try {
11
+ const result = await useCase.execute(candidate_id, action, tags);
12
+ return {
13
+ content: [{ type: 'text', text: JSON.stringify({ tags: result }) }],
14
+ };
15
+ }
16
+ catch (error) {
17
+ return {
18
+ content: [{ type: 'text', text: JSON.stringify({ error: error.message }) }],
19
+ isError: true,
20
+ };
21
+ }
22
+ });
23
+ }
24
+ //# sourceMappingURL=manage-tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage-tags.js","sourceRoot":"","sources":["../../../../src/interface/mcp/tools/manage-tags.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAIlF,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,IAAkB;IAC1E,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAE1D,MAAM,CAAC,IAAI,CACT,aAAa,EACb,4EAA4E,EAC5E;QACE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACxD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC3E,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;KACpG,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;QACvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,MAAmB,EAAE,IAAI,CAAC,CAAC;YAC9E,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;aAC7E,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC/F,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { Dependencies } from '../types.js';
3
+ export declare function registerSemanticSearchTool(server: McpServer, deps: Dependencies): void;
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod/v4';
2
+ import { SemanticSearchUseCase } from '../../../application/use-cases/semantic-search.js';
3
+ export function registerSemanticSearchTool(server, deps) {
4
+ const useCase = new SemanticSearchUseCase(deps.chunkRepo, deps.embeddingService, deps.candidateRepo);
5
+ server.tool('semantic_search', 'Search for candidates matching a text query using vector similarity. Returns ranked results with relevance scores.', {
6
+ query: z.string().describe('Search query text (e.g., job description or skill requirements)'),
7
+ limit: z.number().optional().describe('Maximum number of results (default: 10)'),
8
+ section_type: z
9
+ .enum(['summary', 'experience', 'education', 'skills', 'projects', 'certifications', 'full'])
10
+ .optional()
11
+ .describe('Filter results to a specific CV section type'),
12
+ }, async ({ query, limit, section_type }) => {
13
+ try {
14
+ const results = await useCase.execute({ query, limit, sectionType: section_type });
15
+ return {
16
+ content: [{ type: 'text', text: JSON.stringify(results, null, 2) }],
17
+ };
18
+ }
19
+ catch (error) {
20
+ return {
21
+ content: [{ type: 'text', text: JSON.stringify({ error: error.message }) }],
22
+ isError: true,
23
+ };
24
+ }
25
+ });
26
+ }
27
+ //# sourceMappingURL=semantic-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-search.js","sourceRoot":"","sources":["../../../../src/interface/mcp/tools/semantic-search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAG1F,MAAM,UAAU,0BAA0B,CAAC,MAAiB,EAAE,IAAkB;IAC9E,MAAM,OAAO,GAAG,IAAI,qBAAqB,CACvC,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,aAAa,CACnB,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,oHAAoH,EACpH;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC;QAC7F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QAChF,YAAY,EAAE,CAAC;aACZ,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;aAC5F,QAAQ,EAAE;aACV,QAAQ,CAAC,8CAA8C,CAAC;KAC5D,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE;QACvC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;YACnF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC7E,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC/F,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { Dependencies } from '../types.js';
3
+ export declare function registerUpdateCvTool(server: McpServer, deps: Dependencies): void;
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod/v4';
2
+ import { UpdateCvUseCase } from '../../../application/use-cases/update-cv.js';
3
+ export function registerUpdateCvTool(server, deps) {
4
+ const useCase = new UpdateCvUseCase(deps.candidateRepo, deps.chunkRepo, deps.versionRepo, deps.parsers, deps.embeddingService, deps.extractor);
5
+ server.tool('update_cv', 'Update an existing CV with a new file. Archives the old version and replaces with new data.', {
6
+ candidate_id: z.string().describe('ID of the candidate to update'),
7
+ file_path: z.string().describe('Absolute path to the new CV file (PDF or DOCX)'),
8
+ }, async ({ candidate_id, file_path }) => {
9
+ try {
10
+ const candidate = await useCase.execute(candidate_id, file_path);
11
+ return {
12
+ content: [{ type: 'text', text: JSON.stringify(candidate, null, 2) }],
13
+ };
14
+ }
15
+ catch (error) {
16
+ return {
17
+ content: [{ type: 'text', text: JSON.stringify({ error: error.message }) }],
18
+ isError: true,
19
+ };
20
+ }
21
+ });
22
+ }
23
+ //# sourceMappingURL=update-cv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-cv.js","sourceRoot":"","sources":["../../../../src/interface/mcp/tools/update-cv.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAG9E,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,IAAkB;IACxE,MAAM,OAAO,GAAG,IAAI,eAAe,CACjC,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,SAAS,CACf,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,WAAW,EACX,6FAA6F,EAC7F;QACE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAClE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;KACjF,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EAAE;QACpC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YACjE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC/E,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC/F,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ICandidateRepository } from '../../domain/repositories/candidate-repository.js';
2
+ import type { IChunkRepository } from '../../domain/repositories/chunk-repository.js';
3
+ import type { IVersionRepository } from '../../domain/repositories/version-repository.js';
4
+ import type { IDocumentParser } from '../../application/ports/document-parser.js';
5
+ import type { IEmbeddingService } from '../../application/ports/embedding-service.js';
6
+ import type { IStructuredExtractor } from '../../application/ports/structured-extractor.js';
7
+ import type { IExportService } from '../../application/ports/export-service.js';
8
+ export interface Dependencies {
9
+ candidateRepo: ICandidateRepository;
10
+ chunkRepo: IChunkRepository;
11
+ versionRepo: IVersionRepository;
12
+ parsers: IDocumentParser[];
13
+ embeddingService: IEmbeddingService;
14
+ extractor: IStructuredExtractor;
15
+ exportService: IExportService;
16
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/interface/mcp/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ export declare class AppError extends Error {
2
+ readonly code: string;
3
+ readonly cause?: unknown | undefined;
4
+ constructor(code: string, message: string, cause?: unknown | undefined);
5
+ }
6
+ export declare class CandidateNotFoundError extends AppError {
7
+ constructor(candidateId: string);
8
+ }
9
+ export declare class DuplicateCandidateError extends AppError {
10
+ constructor(identifier: string);
11
+ }
12
+ export declare class DocumentParseError extends AppError {
13
+ constructor(message: string, cause?: unknown);
14
+ }
15
+ export declare class EmbeddingError extends AppError {
16
+ constructor(message: string, cause?: unknown);
17
+ }
18
+ export declare class ExtractionError extends AppError {
19
+ constructor(message: string, cause?: unknown);
20
+ }
21
+ export declare class DatabaseError extends AppError {
22
+ constructor(message: string, cause?: unknown);
23
+ }
24
+ export declare class ValidationError extends AppError {
25
+ constructor(message: string);
26
+ }
27
+ export declare class FileNotFoundError extends AppError {
28
+ constructor(filePath: string);
29
+ }
30
+ export declare class UnsupportedFileTypeError extends AppError {
31
+ constructor(fileType: string);
32
+ }
@@ -0,0 +1,56 @@
1
+ export class AppError extends Error {
2
+ code;
3
+ cause;
4
+ constructor(code, message, cause) {
5
+ super(message);
6
+ this.code = code;
7
+ this.cause = cause;
8
+ this.name = this.constructor.name;
9
+ }
10
+ }
11
+ export class CandidateNotFoundError extends AppError {
12
+ constructor(candidateId) {
13
+ super('CANDIDATE_NOT_FOUND', `Candidate not found: ${candidateId}`);
14
+ }
15
+ }
16
+ export class DuplicateCandidateError extends AppError {
17
+ constructor(identifier) {
18
+ super('DUPLICATE_CANDIDATE', `Candidate already exists: ${identifier}`);
19
+ }
20
+ }
21
+ export class DocumentParseError extends AppError {
22
+ constructor(message, cause) {
23
+ super('DOCUMENT_PARSE_ERROR', message, cause);
24
+ }
25
+ }
26
+ export class EmbeddingError extends AppError {
27
+ constructor(message, cause) {
28
+ super('EMBEDDING_ERROR', message, cause);
29
+ }
30
+ }
31
+ export class ExtractionError extends AppError {
32
+ constructor(message, cause) {
33
+ super('EXTRACTION_ERROR', message, cause);
34
+ }
35
+ }
36
+ export class DatabaseError extends AppError {
37
+ constructor(message, cause) {
38
+ super('DATABASE_ERROR', message, cause);
39
+ }
40
+ }
41
+ export class ValidationError extends AppError {
42
+ constructor(message) {
43
+ super('VALIDATION_ERROR', message);
44
+ }
45
+ }
46
+ export class FileNotFoundError extends AppError {
47
+ constructor(filePath) {
48
+ super('FILE_NOT_FOUND', `File not found: ${filePath}`);
49
+ }
50
+ }
51
+ export class UnsupportedFileTypeError extends AppError {
52
+ constructor(fileType) {
53
+ super('UNSUPPORTED_FILE_TYPE', `Unsupported file type: ${fileType}`);
54
+ }
55
+ }
56
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/errors/index.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEf;IAEA;IAHlB,YACkB,IAAY,EAC5B,OAAe,EACC,KAAe;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAQ;QAEZ,UAAK,GAAL,KAAK,CAAU;QAG/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,QAAQ;IAClD,YAAY,WAAmB;QAC7B,KAAK,CAAC,qBAAqB,EAAE,wBAAwB,WAAW,EAAE,CAAC,CAAC;IACtE,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,QAAQ;IACnD,YAAY,UAAkB;QAC5B,KAAK,CAAC,qBAAqB,EAAE,6BAA6B,UAAU,EAAE,CAAC,CAAC;IAC1E,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,QAAQ;IAC9C,YAAY,OAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,sBAAsB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAC1C,YAAY,OAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,iBAAiB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,kBAAkB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzC,YAAY,OAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,gBAAgB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IAC7C,YAAY,QAAgB;QAC1B,KAAK,CAAC,gBAAgB,EAAE,mBAAmB,QAAQ,EAAE,CAAC,CAAC;IACzD,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,QAAQ;IACpD,YAAY,QAAgB;QAC1B,KAAK,CAAC,uBAAuB,EAAE,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IACvE,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ export type SectionType = 'summary' | 'experience' | 'education' | 'skills' | 'projects' | 'certifications' | 'full';
2
+ export type FileType = 'pdf' | 'docx';
3
+ export type TagAction = 'add' | 'remove' | 'list';
4
+ export type ExportFormat = 'json' | 'csv';
5
+ export type SortField = 'name' | 'created_at' | 'updated_at' | 'experience_years';
6
+ export type SortOrder = 'asc' | 'desc';
7
+ export interface PaginationOptions {
8
+ offset: number;
9
+ limit: number;
10
+ }
11
+ export interface SortOptions {
12
+ field: SortField;
13
+ order: SortOrder;
14
+ }
15
+ export interface ChunkInput {
16
+ sectionType: SectionType;
17
+ content: string;
18
+ metadata: Record<string, unknown>;
19
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { ExtractedCv } from '../../application/dto/extracted-cv.js';
2
+ import type { ChunkInput } from '../types/index.js';
3
+ export declare function createChunks(extracted: ExtractedCv, rawText: string): ChunkInput[];
@@ -0,0 +1,89 @@
1
+ export function createChunks(extracted, rawText) {
2
+ const chunks = [];
3
+ if (extracted.summary) {
4
+ chunks.push({
5
+ sectionType: 'summary',
6
+ content: extracted.summary,
7
+ metadata: {},
8
+ });
9
+ }
10
+ for (let i = 0; i < extracted.experience.length; i++) {
11
+ const exp = extracted.experience[i];
12
+ const parts = [
13
+ `${exp.position} at ${exp.company}`,
14
+ exp.startDate || exp.endDate
15
+ ? `(${exp.startDate ?? '?'} - ${exp.endDate ?? 'Present'})`
16
+ : '',
17
+ exp.description ?? '',
18
+ ].filter(Boolean);
19
+ chunks.push({
20
+ sectionType: 'experience',
21
+ content: parts.join(' '),
22
+ metadata: { index: i, company: exp.company, position: exp.position },
23
+ });
24
+ }
25
+ if (extracted.education.length > 0) {
26
+ const content = extracted.education
27
+ .map((e) => {
28
+ const parts = [
29
+ e.degree,
30
+ e.field ? `in ${e.field}` : '',
31
+ `at ${e.institution}`,
32
+ e.startDate || e.endDate
33
+ ? `(${e.startDate ?? '?'} - ${e.endDate ?? '?'})`
34
+ : '',
35
+ ].filter(Boolean);
36
+ return parts.join(' ');
37
+ })
38
+ .join('\n');
39
+ chunks.push({
40
+ sectionType: 'education',
41
+ content,
42
+ metadata: { count: extracted.education.length },
43
+ });
44
+ }
45
+ if (extracted.skills.length > 0) {
46
+ chunks.push({
47
+ sectionType: 'skills',
48
+ content: extracted.skills.join(', '),
49
+ metadata: { count: extracted.skills.length },
50
+ });
51
+ }
52
+ if (extracted.projects.length > 0) {
53
+ const content = extracted.projects
54
+ .map((p) => {
55
+ const parts = [
56
+ p.name,
57
+ p.description ?? '',
58
+ p.technologies ? `Technologies: ${p.technologies.join(', ')}` : '',
59
+ ].filter(Boolean);
60
+ return parts.join(' - ');
61
+ })
62
+ .join('\n');
63
+ chunks.push({
64
+ sectionType: 'projects',
65
+ content,
66
+ metadata: { count: extracted.projects.length },
67
+ });
68
+ }
69
+ if (extracted.certifications.length > 0) {
70
+ const content = extracted.certifications
71
+ .map((c) => {
72
+ const parts = [c.name, c.issuer ? `by ${c.issuer}` : '', c.date ?? ''].filter(Boolean);
73
+ return parts.join(' ');
74
+ })
75
+ .join('\n');
76
+ chunks.push({
77
+ sectionType: 'certifications',
78
+ content,
79
+ metadata: { count: extracted.certifications.length },
80
+ });
81
+ }
82
+ chunks.push({
83
+ sectionType: 'full',
84
+ content: rawText,
85
+ metadata: {},
86
+ });
87
+ return chunks;
88
+ }
89
+ //# sourceMappingURL=chunking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunking.js","sourceRoot":"","sources":["../../../src/shared/utils/chunking.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { normalizeWhitespace, truncateText, detectFileType, escapeFilterValue } from './text.js';
2
+ export { createChunks } from './chunking.js';
@@ -0,0 +1,3 @@
1
+ export { normalizeWhitespace, truncateText, detectFileType, escapeFilterValue } from './text.js';
2
+ export { createChunks } from './chunking.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { FileType } from '../types/index.js';
2
+ export declare function normalizeWhitespace(text: string): string;
3
+ export declare function truncateText(text: string, maxLength: number): string;
4
+ export declare function detectFileType(filePath: string): FileType;
5
+ export declare function escapeFilterValue(value: string): string;