formbro-mcp-server 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +386 -48
  2. package/dist/index.js +58 -14
  3. package/dist/index.js.map +1 -1
  4. package/dist/services/api-client.d.ts +7 -0
  5. package/dist/services/api-client.d.ts.map +1 -1
  6. package/dist/services/api-client.js +113 -2
  7. package/dist/services/api-client.js.map +1 -1
  8. package/dist/services/idempotency.d.ts +6 -0
  9. package/dist/services/idempotency.d.ts.map +1 -0
  10. package/dist/services/idempotency.js +9 -0
  11. package/dist/services/idempotency.js.map +1 -0
  12. package/dist/tools/applications-extra.d.ts +3 -0
  13. package/dist/tools/applications-extra.d.ts.map +1 -0
  14. package/dist/tools/applications-extra.js +62 -0
  15. package/dist/tools/applications-extra.js.map +1 -0
  16. package/dist/tools/audit.d.ts +3 -0
  17. package/dist/tools/audit.d.ts.map +1 -0
  18. package/dist/tools/audit.js +34 -0
  19. package/dist/tools/audit.js.map +1 -0
  20. package/dist/tools/employers.d.ts.map +1 -1
  21. package/dist/tools/employers.js +17 -29
  22. package/dist/tools/employers.js.map +1 -1
  23. package/dist/tools/export.d.ts +3 -0
  24. package/dist/tools/export.d.ts.map +1 -0
  25. package/dist/tools/export.js +247 -0
  26. package/dist/tools/export.js.map +1 -0
  27. package/dist/tools/extract.d.ts +3 -0
  28. package/dist/tools/extract.d.ts.map +1 -0
  29. package/dist/tools/extract.js +208 -0
  30. package/dist/tools/extract.js.map +1 -0
  31. package/dist/tools/find.js +1 -1
  32. package/dist/tools/find.js.map +1 -1
  33. package/dist/tools/patch.d.ts +10 -0
  34. package/dist/tools/patch.d.ts.map +1 -0
  35. package/dist/tools/patch.js +276 -0
  36. package/dist/tools/patch.js.map +1 -0
  37. package/dist/tools/program-keys.d.ts +3 -0
  38. package/dist/tools/program-keys.d.ts.map +1 -0
  39. package/dist/tools/program-keys.js +13 -0
  40. package/dist/tools/program-keys.js.map +1 -0
  41. package/dist/tools/system.d.ts +3 -0
  42. package/dist/tools/system.d.ts.map +1 -0
  43. package/dist/tools/system.js +84 -0
  44. package/dist/tools/system.js.map +1 -0
  45. package/dist/tools/validate.d.ts +3 -0
  46. package/dist/tools/validate.d.ts.map +1 -0
  47. package/dist/tools/validate.js +68 -0
  48. package/dist/tools/validate.js.map +1 -0
  49. package/dist/tools/write.d.ts +4 -0
  50. package/dist/tools/write.d.ts.map +1 -0
  51. package/dist/tools/write.js +786 -0
  52. package/dist/tools/write.js.map +1 -0
  53. package/package.json +7 -3
  54. package/server.json +67 -0
@@ -0,0 +1,247 @@
1
+ import { z } from "zod";
2
+ import { makeApiRequest, makeApiBinaryRequest, handleApiError } from "../services/api-client.js";
3
+ // ============================================================================
4
+ // Input Schemas
5
+ // ============================================================================
6
+ const ExportEntityExcelSchema = z.object({
7
+ entity_type: z.enum([
8
+ "tr_applicant",
9
+ "pr_applicant",
10
+ "sponsored_applicant",
11
+ "pr_applicant_renewal",
12
+ "sponsor_sps",
13
+ "sponsor_pgp",
14
+ "co_signer",
15
+ "lmia_employer",
16
+ "lmia_applicant",
17
+ "lmia_position",
18
+ ]).describe("Entity type to export. " +
19
+ "TR: tr_applicant (requires program param). " +
20
+ "PR: pr_applicant | sponsored_applicant | pr_applicant_renewal | sponsor_sps | sponsor_pgp | co_signer. " +
21
+ "LMIA: lmia_employer | lmia_applicant | lmia_position."),
22
+ entity_id: z.string().describe("MongoDB ObjectId of the entity (person/applicant/employer record, NOT application_id)."),
23
+ program: z.string().optional().describe("TR program key — required when entity_type=tr_applicant. Values: sp-out | sp-in | wp-out | wp-in | visa-out | visa-in."),
24
+ language: z.enum(["en", "zh"]).default("en").describe("Export language: 'en' (default) or 'zh'."),
25
+ blank: z.boolean().default(false).describe("If true, returns a blank template for the entity type. Default false."),
26
+ }).strict();
27
+ const GetFormTemplateExcelSchema = z.object({
28
+ form_id: z.string().describe("Form config ID to fetch the blank template for (e.g. 'tr-visa-out-applicant', 'lmia-employer', 'pr-general-applicant'). Use list_programs to find valid form_ids."),
29
+ language: z.enum(["en", "zh"]).default("en").describe("Template language: 'en' (default) or 'zh'."),
30
+ }).strict();
31
+ const FillTrApplicationPdfSchema = z.object({
32
+ program: z.string().describe("TR program key (e.g. sp-out, wp-out, visa-out). Used to route to the correct PDF fill endpoint."),
33
+ application_id: z.string().describe("Application MongoDB ObjectId."),
34
+ forms: z.array(z.string()).describe("List of form numbers to fill. " +
35
+ "sp-out: ['0104','1294','5476','5645']. wp-out: ['1295','5476','5645']. " +
36
+ "visa-out: ['5257','5645']. visitor-record: ['1102']. sp-in: ['5709','5645']. wp-in: ['5710','5645']."),
37
+ }).strict();
38
+ const FillTrApplicationPdfAsyncSchema = z.object({
39
+ program: z.string().describe("TR program key (e.g. sp-out, wp-out, visa-out)."),
40
+ application_id: z.string().describe("Application MongoDB ObjectId."),
41
+ forms: z.array(z.string()).describe("List of form numbers to fill. " +
42
+ "sp-out: ['0104','1294','5476','5645']. wp-out: ['1295','5476','5645']. " +
43
+ "visa-out: ['5257','5645']. visitor-record: ['1102']. sp-in: ['5709','5645']. wp-in: ['5710','5645']."),
44
+ }).strict();
45
+ const GetPdfTaskStatusSchema = z.object({
46
+ task_id: z.string().describe("Task ID returned by fill_tr_application_pdf_async."),
47
+ }).strict();
48
+ const GetPdfTaskResultSchema = z.object({
49
+ task_id: z.string().describe("Task ID of a completed PDF fill task."),
50
+ }).strict();
51
+ const CheckTrPdfPreflightSchema = z.object({
52
+ program: z.string().describe("TR program key (e.g. sp-out, wp-out, visa-out)."),
53
+ application_id: z.string().describe("Application MongoDB ObjectId."),
54
+ forms: z.array(z.string()).describe("List of form numbers to preflight check. " +
55
+ "sp-out: ['0104','1294','5476','5645']. wp-out: ['1295','5476','5645']. " +
56
+ "visa-out: ['5257','5645']. visitor-record: ['1102']. sp-in: ['5709','5645']. wp-in: ['5710','5645']."),
57
+ }).strict();
58
+ const ExportApplicationForExtensionSchema = z.object({
59
+ program: z.enum(["tr", "pr", "lmia"]).describe("Program category: 'tr' for all TR programs (sp-out/wp-out/visa-out etc.), 'pr' for PR programs, 'lmia' for LMIA programs."),
60
+ application_id: z.string().describe("Application MongoDB ObjectId."),
61
+ }).strict();
62
+ // ============================================================================
63
+ // Helpers
64
+ // ============================================================================
65
+ function safeFilename(filename) {
66
+ return filename.replace(/[^\w.\-]+/g, "_");
67
+ }
68
+ function fileResourceResponse(file, fallbackFilename) {
69
+ const filename = safeFilename(file.filename ?? fallbackFilename);
70
+ return {
71
+ content: [
72
+ {
73
+ type: "resource",
74
+ resource: {
75
+ uri: `formbro://exports/${encodeURIComponent(filename)}`,
76
+ mimeType: file.contentType,
77
+ blob: file.data.toString("base64"),
78
+ },
79
+ },
80
+ ],
81
+ structuredContent: {
82
+ filename,
83
+ content_type: file.contentType,
84
+ size_bytes: file.data.byteLength,
85
+ },
86
+ };
87
+ }
88
+ // ============================================================================
89
+ // Tool Registration
90
+ // ============================================================================
91
+ export function registerExportTools(server) {
92
+ // 1. export_entity_excel
93
+ server.registerTool("export_entity_excel", {
94
+ title: "Export Entity to Excel",
95
+ description: "Export a person/employer entity as a filled Excel file. " +
96
+ "entity_type must be one of: tr_applicant, pr_applicant, sponsored_applicant, pr_applicant_renewal, " +
97
+ "sponsor_sps, sponsor_pgp, co_signer, lmia_employer, lmia_applicant, lmia_position. " +
98
+ "entity_id is the MongoDB ObjectId of the person/employer record itself — NOT the application_id. " +
99
+ "For tr_applicant, also pass program (e.g. sp-out, wp-out). " +
100
+ "To find entity_id, use get_application_persons first. " +
101
+ "Set blank=true to get an empty template without entity data.",
102
+ inputSchema: ExportEntityExcelSchema.shape,
103
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
104
+ }, async ({ entity_type, entity_id, language, blank, program }) => {
105
+ try {
106
+ const params = {
107
+ language: language ?? "en",
108
+ blank: blank ?? false,
109
+ };
110
+ if (program)
111
+ params.program = program;
112
+ const file = await makeApiBinaryRequest(`/api/exports/entity/${encodeURIComponent(entity_type)}/${encodeURIComponent(entity_id)}`, "GET", undefined, params);
113
+ return fileResourceResponse(file, `${entity_type}_${entity_id}.xlsx`);
114
+ }
115
+ catch (error) {
116
+ return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
117
+ }
118
+ });
119
+ // 2. get_form_template_excel
120
+ server.registerTool("get_form_template_excel", {
121
+ title: "Get Blank Form Template Excel",
122
+ description: "Download a blank Excel template for a specific form config (e.g. 'tr-visa-out-applicant', 'lmia-employer'). " +
123
+ "form_id is the form config ID from list_programs (e.g. form_ids.applicant), not the IMM number. " +
124
+ "Use to provide a pre-formatted blank template for manual data entry.",
125
+ inputSchema: GetFormTemplateExcelSchema.shape,
126
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
127
+ }, async ({ form_id, language }) => {
128
+ try {
129
+ const file = await makeApiBinaryRequest(`/api/exports/template/${encodeURIComponent(form_id)}`, "GET", undefined, { language: language ?? "en" });
130
+ return fileResourceResponse(file, `${form_id}_template.xlsx`);
131
+ }
132
+ catch (error) {
133
+ return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
134
+ }
135
+ });
136
+ // 3. fill_tr_application_pdf
137
+ server.registerTool("fill_tr_application_pdf", {
138
+ title: "Fill TR Application PDF (Sync)",
139
+ description: "Synchronously fill TR immigration PDF forms for an application. " +
140
+ "Pass forms as list of IMM numbers (e.g. ['1294','5476']). " +
141
+ "Returns the generated PDF file, or a ZIP file when multiple forms are requested. " +
142
+ "For long-running fills, use fill_tr_application_pdf_async instead. " +
143
+ "Call check_tr_pdf_preflight first to verify the application is ready.",
144
+ inputSchema: FillTrApplicationPdfSchema.shape,
145
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
146
+ }, async ({ program, application_id, forms }) => {
147
+ try {
148
+ const file = await makeApiBinaryRequest(`/api/form-filling/tr/${encodeURIComponent(program)}/applications/${encodeURIComponent(application_id)}/fill-pdf`, "POST", { forms });
149
+ return fileResourceResponse(file, forms.length === 1 ? `IMM${forms[0]}.pdf` : `TR_Forms_${application_id}.zip`);
150
+ }
151
+ catch (error) {
152
+ return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
153
+ }
154
+ });
155
+ // 4. fill_tr_application_pdf_async
156
+ server.registerTool("fill_tr_application_pdf_async", {
157
+ title: "Fill TR Application PDF (Async)",
158
+ description: "Start an asynchronous TR PDF fill job for an application. " +
159
+ "Returns a task_id immediately without waiting for completion. " +
160
+ "Poll get_pdf_task_status until status is 'completed' or 'failed', " +
161
+ "then call get_pdf_task_result to retrieve the download information. " +
162
+ "Prefer this over fill_tr_application_pdf for large or complex forms.",
163
+ inputSchema: FillTrApplicationPdfAsyncSchema.shape,
164
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
165
+ }, async ({ program, application_id, forms }) => {
166
+ try {
167
+ const data = await makeApiRequest(`/api/form-filling/tr/${encodeURIComponent(program)}/applications/${encodeURIComponent(application_id)}/fill-pdf-async`, "POST", { forms });
168
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
169
+ }
170
+ catch (error) {
171
+ return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
172
+ }
173
+ });
174
+ // 5. get_pdf_task_status
175
+ server.registerTool("get_pdf_task_status", {
176
+ title: "Get PDF Fill Task Status",
177
+ description: "Poll the status of an async TR PDF fill task started by fill_tr_application_pdf_async. " +
178
+ "Returns status (pending|running|completed|failed) and progress information. " +
179
+ "Call repeatedly until status is 'completed' or 'failed', " +
180
+ "then call get_pdf_task_result to retrieve the download link.",
181
+ inputSchema: GetPdfTaskStatusSchema.shape,
182
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
183
+ }, async ({ task_id }) => {
184
+ try {
185
+ const data = await makeApiRequest(`/api/form-filling/tr/pdf-status/${encodeURIComponent(task_id)}`, "GET");
186
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
187
+ }
188
+ catch (error) {
189
+ return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
190
+ }
191
+ });
192
+ // 6. get_pdf_task_result
193
+ server.registerTool("get_pdf_task_result", {
194
+ title: "Get PDF Fill Task Result",
195
+ description: "Retrieve the result of a completed async TR PDF fill task. " +
196
+ "Returns the generated PDF file, or a ZIP file when multiple forms were requested. " +
197
+ "Only call after get_pdf_task_status returns status 'completed'. " +
198
+ "If status is 'failed', check get_pdf_task_status for the error details.",
199
+ inputSchema: GetPdfTaskResultSchema.shape,
200
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
201
+ }, async ({ task_id }) => {
202
+ try {
203
+ const file = await makeApiBinaryRequest(`/api/form-filling/tr/pdf-result/${encodeURIComponent(task_id)}`, "GET");
204
+ return fileResourceResponse(file, `tr-pdf-task-${task_id}.zip`);
205
+ }
206
+ catch (error) {
207
+ return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
208
+ }
209
+ });
210
+ // 7. check_tr_pdf_preflight
211
+ server.registerTool("check_tr_pdf_preflight", {
212
+ title: "Check TR PDF Preflight",
213
+ description: "Run a preflight check before filling a TR PDF form for an application. " +
214
+ "Returns a list of missing or invalid fields that would block PDF generation. " +
215
+ "Use before fill_tr_application_pdf or fill_tr_application_pdf_async " +
216
+ "to avoid fill failures and identify required data gaps.",
217
+ inputSchema: CheckTrPdfPreflightSchema.shape,
218
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
219
+ }, async ({ program, application_id, forms }) => {
220
+ try {
221
+ const data = await makeApiRequest(`/api/form-filling/tr/${encodeURIComponent(program)}/applications/${encodeURIComponent(application_id)}/fill-pdf-check`, "POST", { forms });
222
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
223
+ }
224
+ catch (error) {
225
+ return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
226
+ }
227
+ });
228
+ // 8. export_application_for_extension
229
+ server.registerTool("export_application_for_extension", {
230
+ title: "Export Application for Chrome Extension",
231
+ description: "Export an application's data payload for the FormBro Chrome Extension filler. " +
232
+ "Contains encrypted RCIC credentials — sensitive field redaction middleware applies automatically for fb_xxx tokens. " +
233
+ "Use when preparing an application package to be consumed by the browser extension for portal auto-fill. " +
234
+ "Do NOT expose the raw output to end users; treat the response as confidential.",
235
+ inputSchema: ExportApplicationForExtensionSchema.shape,
236
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
237
+ }, async ({ program, application_id }) => {
238
+ try {
239
+ const data = await makeApiRequest(`/api/extension/export/${encodeURIComponent(program)}/${encodeURIComponent(application_id)}`, "GET");
240
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
241
+ }
242
+ catch (error) {
243
+ return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
244
+ }
245
+ });
246
+ }
247
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/tools/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerExtractTools(server: McpServer): void;
3
+ //# sourceMappingURL=extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/tools/extract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyDpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmN5D"}
@@ -0,0 +1,208 @@
1
+ import { z } from "zod";
2
+ import { makeApiRequest, handleApiError } from "../services/api-client.js";
3
+ import { buildApplicationPatchUrl, expandDotNotation, getProgramInfo } from "./patch.js";
4
+ import { normalizeProgramKey } from "./program-keys.js";
5
+ // ============================================================================
6
+ // Input Schemas
7
+ // ============================================================================
8
+ const ExtractFromTextSchema = z.object({
9
+ text: z.string().describe("Raw text content to extract structured immigration data from. " +
10
+ "If you have a file (PDF, DOCX, image, etc.), read its content first and pass the extracted text here."),
11
+ program_key: z.string().describe("Program key context for extraction (e.g. sp-out, pgp, hws)."),
12
+ entity_type: z.string().describe("Entity type to extract into: applicant, application, employer."),
13
+ entity_id: z.string().optional().describe("Optional entity ID to use as extraction context."),
14
+ sub_object_type: z.string().optional().describe("Optional sub-object type within the entity (e.g. passport)."),
15
+ model: z.string().optional().describe("AI model override for extraction (defaults to server config)."),
16
+ }).strict();
17
+ const GetImportJsonContractSchema = z.object({
18
+ program_key: z.string().describe("Program key context (e.g. sp-out, sps, hws)."),
19
+ entity_type: z.string().describe("Entity type: applicant, application, sponsor, co_signer, employer, or position."),
20
+ sub_object_type: z.string().optional().describe("Optional top-level model field to extract. Use 'personid' for passport data, not 'passport'."),
21
+ }).strict();
22
+ const ApplyExtractedJsonSchema = z.object({
23
+ target_entity_id: z.string().describe("MongoDB ObjectId of the entity to update."),
24
+ target_entity_type: z.enum(["applicant", "application", "employer"]).describe("Stored entity type to update. Sponsors/co-signers/dependents are stored as applicant records."),
25
+ program_key: z.string().optional().describe("Required when target_entity_type=application."),
26
+ extracted_json: z.record(z.unknown()).or(z.array(z.unknown())).describe("JSON already extracted by the MCP consumer using get_import_json_contract."),
27
+ sub_object_type: z.string().optional().describe("If provided, wraps extracted_json under this top-level field before saving."),
28
+ expected_version: z.number().optional().describe("Optimistic locking version for application/applicant patches."),
29
+ }).strict();
30
+ const GetExtractTaskStatusSchema = z.object({
31
+ task_id: z.string().describe("Task ID returned by a previous async extraction call."),
32
+ }).strict();
33
+ function wrapExtractedJson(extracted_json, sub_object_type) {
34
+ if (!sub_object_type)
35
+ return extracted_json;
36
+ return { [sub_object_type]: extracted_json };
37
+ }
38
+ // ============================================================================
39
+ // Tool Registration
40
+ // ============================================================================
41
+ export function registerExtractTools(server) {
42
+ // 0. get_import_json_contract
43
+ server.registerTool("get_import_json_contract", {
44
+ title: "Get Import JSON Contract",
45
+ description: "Preferred MCP import flow. Returns the JSON Schema and extraction prompt that the MCP consumer should use locally. " +
46
+ "The consumer reads files/text, extracts JSON itself, then calls apply_extracted_json. " +
47
+ "Use sub_object_type='personid' for passport data.",
48
+ inputSchema: GetImportJsonContractSchema.shape,
49
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
50
+ }, async ({ program_key, entity_type, sub_object_type }) => {
51
+ try {
52
+ const params = {
53
+ program_key: normalizeProgramKey(program_key),
54
+ entity_type,
55
+ };
56
+ if (sub_object_type)
57
+ params.sub_object_type = sub_object_type;
58
+ const data = await makeApiRequest("/api/import/schema", "GET", undefined, params);
59
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
60
+ }
61
+ catch (error) {
62
+ return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
63
+ }
64
+ });
65
+ // 0b. apply_extracted_json
66
+ server.registerTool("apply_extracted_json", {
67
+ title: "Apply Extracted JSON",
68
+ description: "Save JSON that the MCP consumer already extracted using get_import_json_contract. " +
69
+ "This does not run FormBro backend AI extraction. It patches the target applicant, application, or employer.",
70
+ inputSchema: ApplyExtractedJsonSchema.shape,
71
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
72
+ }, async ({ target_entity_id, target_entity_type, program_key, extracted_json, sub_object_type, expected_version }) => {
73
+ try {
74
+ const payload = wrapExtractedJson(extracted_json, sub_object_type);
75
+ if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
76
+ return {
77
+ isError: true,
78
+ content: [{ type: "text", text: "Error: extracted_json must be a JSON object unless sub_object_type is provided." }],
79
+ };
80
+ }
81
+ if (target_entity_type === "applicant") {
82
+ const params = { skip_validation: true };
83
+ if (expected_version !== undefined)
84
+ params.if_match = expected_version;
85
+ const data = await makeApiRequest(`/api/applicants/${encodeURIComponent(target_entity_id)}`, "PATCH", expandDotNotation(payload), params);
86
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
87
+ }
88
+ if (target_entity_type === "employer") {
89
+ const data = await makeApiRequest(`/api/lmia/employers/${encodeURIComponent(target_entity_id)}`, "PATCH", payload);
90
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
91
+ }
92
+ if (!program_key) {
93
+ return {
94
+ isError: true,
95
+ content: [{ type: "text", text: "Error: program_key is required when target_entity_type='application'." }],
96
+ };
97
+ }
98
+ const progInfo = await getProgramInfo(program_key);
99
+ if (!progInfo) {
100
+ return {
101
+ isError: true,
102
+ content: [{ type: "text", text: `Error: Unknown program_key '${program_key}'. Use list_programs to find valid keys.` }],
103
+ };
104
+ }
105
+ const params = { skip_validation: true };
106
+ if (expected_version !== undefined)
107
+ params.if_match = expected_version;
108
+ const url = buildApplicationPatchUrl(progInfo.api_endpoint, progInfo.category, target_entity_id);
109
+ const data = await makeApiRequest(url, "PATCH", payload, params);
110
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
111
+ }
112
+ catch (error) {
113
+ return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
114
+ }
115
+ });
116
+ // 1. extract_from_text
117
+ server.registerTool("extract_from_text", {
118
+ title: "Extract Data from Text",
119
+ description: "Returns parsed dict only; does NOT create or update records. " +
120
+ "Legacy flow: this asks FormBro backend AI to extract from text. " +
121
+ "Prefer get_import_json_contract + local client extraction + apply_extracted_json for MCP clients. " +
122
+ "Extracts structured immigration data from raw text. " +
123
+ "sub_object_type must be a top-level model field; use 'personid' for passport data.",
124
+ inputSchema: ExtractFromTextSchema.shape,
125
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
126
+ }, async ({ text, program_key, entity_type, entity_id, sub_object_type, model }) => {
127
+ try {
128
+ const body = { text, program_key, entity_type };
129
+ if (entity_id)
130
+ body.entity_id = entity_id;
131
+ if (sub_object_type)
132
+ body.sub_object_type = sub_object_type;
133
+ if (model)
134
+ body.model = model;
135
+ const data = await makeApiRequest("/api/import/text", "POST", body);
136
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
137
+ }
138
+ catch (error) {
139
+ return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
140
+ }
141
+ });
142
+ // 2. get_extract_task_status
143
+ server.registerTool("get_extract_task_status", {
144
+ title: "Get Extract Task Status",
145
+ description: "Returns parsed dict only; does NOT create or update records. " +
146
+ "Poll the status of an async extraction task. " +
147
+ "Returns status (pending|running|completed|failed) and extracted data when completed.",
148
+ inputSchema: GetExtractTaskStatusSchema.shape,
149
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
150
+ }, async ({ task_id }) => {
151
+ try {
152
+ const data = await makeApiRequest(`/api/import/task/${encodeURIComponent(task_id)}`, "GET");
153
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
154
+ }
155
+ catch (error) {
156
+ return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
157
+ }
158
+ });
159
+ // 3. list_extract_models
160
+ server.registerTool("list_extract_models", {
161
+ title: "List Available Extract AI Models",
162
+ description: "Returns parsed dict only; does NOT create or update records. " +
163
+ "List all AI models available for extraction.",
164
+ inputSchema: z.object({}).strict().shape,
165
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
166
+ }, async () => {
167
+ try {
168
+ const data = await makeApiRequest("/api/import/models", "GET");
169
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
170
+ }
171
+ catch (error) {
172
+ return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
173
+ }
174
+ });
175
+ // 4. list_extract_formats
176
+ server.registerTool("list_extract_formats", {
177
+ title: "List Supported Extract File Formats",
178
+ description: "Returns parsed dict only; does NOT create or update records. " +
179
+ "List all file formats the extraction engine can read (pdf, docx, jpg, png, etc.).",
180
+ inputSchema: z.object({}).strict().shape,
181
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
182
+ }, async () => {
183
+ try {
184
+ const data = await makeApiRequest("/api/import/formats", "GET");
185
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
186
+ }
187
+ catch (error) {
188
+ return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
189
+ }
190
+ });
191
+ // 5. clear_extract_cache
192
+ server.registerTool("clear_extract_cache", {
193
+ title: "Clear Extract Cache",
194
+ description: "Returns parsed dict only; does NOT create or update records. " +
195
+ "Clear the server-side extraction cache when previously extracted data is stale.",
196
+ inputSchema: z.object({}).strict().shape,
197
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false },
198
+ }, async () => {
199
+ try {
200
+ const data = await makeApiRequest("/api/import/cache/clear", "POST", {});
201
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
202
+ }
203
+ catch (error) {
204
+ return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
205
+ }
206
+ });
207
+ }
208
+ //# sourceMappingURL=extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/tools/extract.ts"],"names":[],"mappings":"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"}
@@ -96,7 +96,7 @@ WHEN TO USE OTHER TOOLS:
96
96
  if (args.include && args.include.length > 0) {
97
97
  params.include = args.include.join(",");
98
98
  }
99
- const response = await makeApiRequest("/mcp/find", "GET", undefined, params);
99
+ const response = await makeApiRequest("/api/mcp/find", "GET", undefined, params);
100
100
  return {
101
101
  content: [
102
102
  {
@@ -1 +1 @@
1
- {"version":3,"file":"find.js","sourceRoot":"","sources":["../../src/tools/find.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"find.js","sourceRoot":"","sources":["../../src/tools/find.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function getProgramInfo(program_key: string): Promise<{
3
+ api_endpoint: string;
4
+ category: string;
5
+ form_ids?: Record<string, string>;
6
+ } | null>;
7
+ export declare function buildApplicationPatchUrl(api_endpoint: string, category: string, application_id: string): string;
8
+ export declare function expandDotNotation(updates: Record<string, unknown>): Record<string, unknown>;
9
+ export declare function registerPatchTools(server: McpServer): void;
10
+ //# sourceMappingURL=patch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../src/tools/patch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0EpE,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,GAAG,IAAI,CAAC,CAsBR;AAED,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAO/G;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsB3F;AA4BD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoL1D"}