formbro-mcp-server 1.0.1 → 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.
- package/README.md +42 -24
- package/dist/index.js +58 -14
- package/dist/index.js.map +1 -1
- package/dist/services/api-client.d.ts +7 -0
- package/dist/services/api-client.d.ts.map +1 -1
- package/dist/services/api-client.js +113 -2
- package/dist/services/api-client.js.map +1 -1
- package/dist/services/idempotency.d.ts +6 -0
- package/dist/services/idempotency.d.ts.map +1 -0
- package/dist/services/idempotency.js +9 -0
- package/dist/services/idempotency.js.map +1 -0
- package/dist/tools/applications-extra.d.ts +3 -0
- package/dist/tools/applications-extra.d.ts.map +1 -0
- package/dist/tools/applications-extra.js +62 -0
- package/dist/tools/applications-extra.js.map +1 -0
- package/dist/tools/audit.d.ts +3 -0
- package/dist/tools/audit.d.ts.map +1 -0
- package/dist/tools/audit.js +34 -0
- package/dist/tools/audit.js.map +1 -0
- package/dist/tools/employers.d.ts.map +1 -1
- package/dist/tools/employers.js +17 -29
- package/dist/tools/employers.js.map +1 -1
- package/dist/tools/export.d.ts +3 -0
- package/dist/tools/export.d.ts.map +1 -0
- package/dist/tools/export.js +247 -0
- package/dist/tools/export.js.map +1 -0
- package/dist/tools/extract.d.ts +3 -0
- package/dist/tools/extract.d.ts.map +1 -0
- package/dist/tools/extract.js +208 -0
- package/dist/tools/extract.js.map +1 -0
- package/dist/tools/patch.d.ts +10 -0
- package/dist/tools/patch.d.ts.map +1 -0
- package/dist/tools/patch.js +276 -0
- package/dist/tools/patch.js.map +1 -0
- package/dist/tools/program-keys.d.ts +3 -0
- package/dist/tools/program-keys.d.ts.map +1 -0
- package/dist/tools/program-keys.js +13 -0
- package/dist/tools/program-keys.js.map +1 -0
- package/dist/tools/system.d.ts +3 -0
- package/dist/tools/system.d.ts.map +1 -0
- package/dist/tools/system.js +84 -0
- package/dist/tools/system.js.map +1 -0
- package/dist/tools/validate.d.ts +3 -0
- package/dist/tools/validate.d.ts.map +1 -0
- package/dist/tools/validate.js +68 -0
- package/dist/tools/validate.js.map +1 -0
- package/dist/tools/write.d.ts +4 -0
- package/dist/tools/write.d.ts.map +1 -0
- package/dist/tools/write.js +786 -0
- package/dist/tools/write.js.map +1 -0
- package/package.json +7 -3
- package/server.json +67 -0
package/README.md
CHANGED
|
@@ -2,25 +2,43 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/formbro-mcp-server)
|
|
4
4
|
|
|
5
|
-
MCP server for FormBro immigration
|
|
5
|
+
MCP server for FormBro Canadian immigration application automation. It provides agent access to FormBro applications, applicants, employers, validation, export, and controlled write workflows through the Model Context Protocol.
|
|
6
6
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
|
|
9
|
+
- **Hosted MCP** - Use `https://mcp.formbro.ca/mcp` from Claude Code, Codex, Cursor, and other MCP clients.
|
|
10
|
+
- **Local stdio MCP** - Use `npx -y formbro-mcp-server` for Claude Desktop and offline debugging.
|
|
11
|
+
- **Toolset gating** - Public default is `system,read,validate`; write/export/audit tools require explicit opt-in.
|
|
12
|
+
- **Secure authentication** - Token-based FormBro API authentication with per-request bearer tokens for hosted HTTP.
|
|
13
|
+
- **Dual transport** - Supports stdio (local) and Streamable HTTP (hosted/self-hosted) modes.
|
|
14
|
+
|
|
15
|
+
## Hosted MCP Quick Start
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
claude mcp add --transport http formbro \
|
|
19
|
+
"https://mcp.formbro.ca/mcp?toolsets=system,read,validate" \
|
|
20
|
+
--header "Authorization: Bearer fb_your_token_here"
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
For Codex:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
export FORMBRO_API_TOKEN=fb_your_token_here
|
|
27
|
+
codex mcp add formbro \
|
|
28
|
+
--url "https://mcp.formbro.ca/mcp?toolsets=system,read,validate" \
|
|
29
|
+
--bearer-token-env-var FORMBRO_API_TOKEN
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Use local stdio only when your client requires a local MCP process or you need offline debugging.
|
|
15
33
|
|
|
16
34
|
## Installation
|
|
17
35
|
|
|
18
|
-
### Option 1: Using npx
|
|
36
|
+
### Option 1: Using npx
|
|
19
37
|
|
|
20
38
|
No installation needed - run directly:
|
|
21
39
|
|
|
22
40
|
```bash
|
|
23
|
-
npx formbro-mcp-server
|
|
41
|
+
npx -y formbro-mcp-server --toolsets=system,read,validate
|
|
24
42
|
```
|
|
25
43
|
|
|
26
44
|
### Option 2: Global Installation
|
|
@@ -48,18 +66,18 @@ npm install formbro-mcp-server
|
|
|
48
66
|
#### stdio mode (for Claude Desktop)
|
|
49
67
|
|
|
50
68
|
```bash
|
|
51
|
-
FORMBRO_API_URL=https://
|
|
69
|
+
FORMBRO_API_URL=https://backend.formbro.ca \
|
|
52
70
|
FORMBRO_API_TOKEN=fb_your_token_here \
|
|
53
|
-
formbro-mcp-server
|
|
71
|
+
formbro-mcp-server --toolsets=system,read,validate
|
|
54
72
|
```
|
|
55
73
|
|
|
56
74
|
#### HTTP mode (for remote access / Claude Code HTTP)
|
|
57
75
|
|
|
58
76
|
```bash
|
|
59
|
-
FORMBRO_API_URL=https://
|
|
77
|
+
FORMBRO_API_URL=https://backend.formbro.ca \
|
|
60
78
|
TRANSPORT=http \
|
|
61
79
|
PORT=3000 \
|
|
62
|
-
formbro-mcp-server
|
|
80
|
+
formbro-mcp-server --toolsets=system,read,validate
|
|
63
81
|
```
|
|
64
82
|
|
|
65
83
|
**Note:** In HTTP mode, the token is provided per-request via the `Authorization` header, not in the environment.
|
|
@@ -95,7 +113,7 @@ Add to your `claude_desktop_config.json`:
|
|
|
95
113
|
"command": "npx",
|
|
96
114
|
"args": ["-y", "formbro-mcp-server"],
|
|
97
115
|
"env": {
|
|
98
|
-
"FORMBRO_API_URL": "https://
|
|
116
|
+
"FORMBRO_API_URL": "https://backend.formbro.ca",
|
|
99
117
|
"FORMBRO_API_TOKEN": "fb_your_token_here"
|
|
100
118
|
}
|
|
101
119
|
}
|
|
@@ -111,7 +129,7 @@ Add to your `claude_desktop_config.json`:
|
|
|
111
129
|
"formbro": {
|
|
112
130
|
"command": "formbro-mcp-server",
|
|
113
131
|
"env": {
|
|
114
|
-
"FORMBRO_API_URL": "https://
|
|
132
|
+
"FORMBRO_API_URL": "https://backend.formbro.ca",
|
|
115
133
|
"FORMBRO_API_TOKEN": "fb_your_token_here"
|
|
116
134
|
}
|
|
117
135
|
}
|
|
@@ -128,7 +146,7 @@ Add to your `claude_desktop_config.json`:
|
|
|
128
146
|
"command": "node",
|
|
129
147
|
"args": ["/path/to/formbro-mcp-server/dist/index.js"],
|
|
130
148
|
"env": {
|
|
131
|
-
"FORMBRO_API_URL": "https://
|
|
149
|
+
"FORMBRO_API_URL": "https://backend.formbro.ca",
|
|
132
150
|
"FORMBRO_API_TOKEN": "fb_your_token_here"
|
|
133
151
|
}
|
|
134
152
|
}
|
|
@@ -148,7 +166,7 @@ Claude Code supports both **stdio** and **HTTP** transports.
|
|
|
148
166
|
|
|
149
167
|
```bash
|
|
150
168
|
# In a terminal, run:
|
|
151
|
-
FORMBRO_API_URL=https://
|
|
169
|
+
FORMBRO_API_URL=https://backend.formbro.ca \
|
|
152
170
|
TRANSPORT=http \
|
|
153
171
|
PORT=3000 \
|
|
154
172
|
formbro-mcp-server
|
|
@@ -158,7 +176,7 @@ Or create an `.env` file:
|
|
|
158
176
|
|
|
159
177
|
```bash
|
|
160
178
|
# .env
|
|
161
|
-
FORMBRO_API_URL=https://
|
|
179
|
+
FORMBRO_API_URL=https://backend.formbro.ca
|
|
162
180
|
TRANSPORT=http
|
|
163
181
|
MCP_PORT=3000
|
|
164
182
|
```
|
|
@@ -191,7 +209,7 @@ claude mcp list
|
|
|
191
209
|
|
|
192
210
|
```bash
|
|
193
211
|
claude mcp add --transport stdio formbro -- \
|
|
194
|
-
env FORMBRO_API_URL=https://
|
|
212
|
+
env FORMBRO_API_URL=https://backend.formbro.ca \
|
|
195
213
|
FORMBRO_API_TOKEN=fb_your_token_here \
|
|
196
214
|
npx -y formbro-mcp-server
|
|
197
215
|
```
|
|
@@ -200,7 +218,7 @@ claude mcp add --transport stdio formbro -- \
|
|
|
200
218
|
|
|
201
219
|
```bash
|
|
202
220
|
claude mcp add --transport stdio formbro -- \
|
|
203
|
-
env FORMBRO_API_URL=https://
|
|
221
|
+
env FORMBRO_API_URL=https://backend.formbro.ca \
|
|
204
222
|
FORMBRO_API_TOKEN=fb_your_token_here \
|
|
205
223
|
formbro-mcp-server
|
|
206
224
|
```
|
|
@@ -337,7 +355,7 @@ Health check endpoint returning server status.
|
|
|
337
355
|
"status": "ok",
|
|
338
356
|
"server": "formbro-mcp-server",
|
|
339
357
|
"version": "1.0.0",
|
|
340
|
-
"apiUrl": "https://
|
|
358
|
+
"apiUrl": "https://backend.formbro.ca",
|
|
341
359
|
"apiConfigured": true
|
|
342
360
|
}
|
|
343
361
|
```
|
|
@@ -393,7 +411,7 @@ Returns server information and available tools.
|
|
|
393
411
|
2. Verify environment variables are set correctly
|
|
394
412
|
3. Test manually:
|
|
395
413
|
```bash
|
|
396
|
-
FORMBRO_API_URL=https://
|
|
414
|
+
FORMBRO_API_URL=https://backend.formbro.ca \
|
|
397
415
|
FORMBRO_API_TOKEN=fb_your_token \
|
|
398
416
|
formbro-mcp-server
|
|
399
417
|
```
|
|
@@ -421,12 +439,12 @@ pnpm dev
|
|
|
421
439
|
|
|
422
440
|
```bash
|
|
423
441
|
# Test stdio mode
|
|
424
|
-
FORMBRO_API_URL=https://
|
|
442
|
+
FORMBRO_API_URL=https://backend.formbro.ca \
|
|
425
443
|
FORMBRO_API_TOKEN=fb_your_token \
|
|
426
444
|
pnpm start
|
|
427
445
|
|
|
428
446
|
# Test HTTP mode
|
|
429
|
-
FORMBRO_API_URL=https://
|
|
447
|
+
FORMBRO_API_URL=https://backend.formbro.ca \
|
|
430
448
|
TRANSPORT=http \
|
|
431
449
|
PORT=3000 \
|
|
432
450
|
pnpm start
|
package/dist/index.js
CHANGED
|
@@ -21,9 +21,34 @@ import { registerApplicantTools } from "./tools/applicants.js";
|
|
|
21
21
|
import { registerApplicationTools } from "./tools/applications.js";
|
|
22
22
|
import { registerEmployerTools } from "./tools/employers.js";
|
|
23
23
|
import { registerFindTool } from "./tools/find.js";
|
|
24
|
+
import { registerSystemTools } from "./tools/system.js";
|
|
25
|
+
import { registerReadExtraTools } from "./tools/applications-extra.js";
|
|
26
|
+
import { registerValidateTools } from "./tools/validate.js";
|
|
27
|
+
import { registerWriteTools } from "./tools/write.js";
|
|
28
|
+
import { registerPatchTools } from "./tools/patch.js";
|
|
29
|
+
import { registerAuditTools } from "./tools/audit.js";
|
|
30
|
+
import { registerExtractTools } from "./tools/extract.js";
|
|
31
|
+
import { registerExportTools } from "./tools/export.js";
|
|
32
|
+
// Toolset configuration
|
|
33
|
+
const TOOLSETS = ["system", "read", "validate", "write", "patch", "extract", "export", "audit"];
|
|
34
|
+
const DEFAULT_TOOLSETS = ["system", "read", "validate"];
|
|
35
|
+
function parseToolsetsFromFlag() {
|
|
36
|
+
const flag = process.argv.find((a) => a.startsWith("--toolsets="))?.split("=")[1];
|
|
37
|
+
if (!flag)
|
|
38
|
+
return new Set(DEFAULT_TOOLSETS);
|
|
39
|
+
return new Set(flag.split(",").filter((t) => TOOLSETS.includes(t)));
|
|
40
|
+
}
|
|
41
|
+
function parseToolsetsFromQuery(query) {
|
|
42
|
+
if (!query)
|
|
43
|
+
return parseToolsetsFromFlag();
|
|
44
|
+
const requested = new Set(query.split(",").filter((t) => TOOLSETS.includes(t)));
|
|
45
|
+
return requested.size > 0 ? requested : parseToolsetsFromFlag();
|
|
46
|
+
}
|
|
47
|
+
// Used for stdio mode (startup-time only)
|
|
48
|
+
const enabledToolsets = parseToolsetsFromFlag();
|
|
24
49
|
// Server configuration
|
|
25
50
|
const SERVER_NAME = "formbro-mcp-server";
|
|
26
|
-
const SERVER_VERSION = "1.0.
|
|
51
|
+
const SERVER_VERSION = "1.0.2";
|
|
27
52
|
/**
|
|
28
53
|
* Validate required environment variables for STDIO mode
|
|
29
54
|
*/
|
|
@@ -56,18 +81,35 @@ function validateEnvironmentHttp() {
|
|
|
56
81
|
return { apiUrl };
|
|
57
82
|
}
|
|
58
83
|
/**
|
|
59
|
-
* Create and configure the MCP server
|
|
84
|
+
* Create and configure the MCP server with the given toolsets
|
|
60
85
|
*/
|
|
61
|
-
function createServer() {
|
|
86
|
+
function createServer(toolsets = enabledToolsets) {
|
|
62
87
|
const server = new McpServer({
|
|
63
88
|
name: SERVER_NAME,
|
|
64
89
|
version: SERVER_VERSION
|
|
65
90
|
});
|
|
66
|
-
// Register
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
91
|
+
// Register tools based on enabled toolsets
|
|
92
|
+
if (toolsets.has("system"))
|
|
93
|
+
registerSystemTools(server);
|
|
94
|
+
if (toolsets.has("read")) {
|
|
95
|
+
registerFindTool(server);
|
|
96
|
+
registerApplicantTools(server);
|
|
97
|
+
registerApplicationTools(server);
|
|
98
|
+
registerEmployerTools(server);
|
|
99
|
+
registerReadExtraTools(server);
|
|
100
|
+
}
|
|
101
|
+
if (toolsets.has("validate"))
|
|
102
|
+
registerValidateTools(server);
|
|
103
|
+
if (toolsets.has("write"))
|
|
104
|
+
registerWriteTools(server);
|
|
105
|
+
if (toolsets.has("patch"))
|
|
106
|
+
registerPatchTools(server);
|
|
107
|
+
if (toolsets.has("audit"))
|
|
108
|
+
registerAuditTools(server);
|
|
109
|
+
if (toolsets.has("extract"))
|
|
110
|
+
registerExtractTools(server);
|
|
111
|
+
if (toolsets.has("export"))
|
|
112
|
+
registerExportTools(server);
|
|
71
113
|
return server;
|
|
72
114
|
}
|
|
73
115
|
/**
|
|
@@ -135,9 +177,11 @@ async function runHttp() {
|
|
|
135
177
|
}
|
|
136
178
|
// Create API client with the provided token
|
|
137
179
|
const apiClient = createApiClientWithToken(token);
|
|
180
|
+
// Parse toolsets from query param (default: system,read,validate)
|
|
181
|
+
const toolsets = parseToolsetsFromQuery(req.query.toolsets);
|
|
138
182
|
// Run the MCP request with the token-specific API client
|
|
139
183
|
await runWithApiClient(apiClient, async () => {
|
|
140
|
-
const server = createServer();
|
|
184
|
+
const server = createServer(toolsets);
|
|
141
185
|
// Create new transport for each request (stateless)
|
|
142
186
|
const transport = new StreamableHTTPServerTransport({
|
|
143
187
|
sessionIdGenerator: undefined,
|
|
@@ -236,8 +280,8 @@ ENVIRONMENT VARIABLES:
|
|
|
236
280
|
FORMBRO_API_URL Base URL of FormBro API (required)
|
|
237
281
|
Example: https://api.formbro.com
|
|
238
282
|
|
|
239
|
-
FORMBRO_API_TOKEN Your FormBro API token
|
|
240
|
-
|
|
283
|
+
FORMBRO_API_TOKEN Your FormBro API token
|
|
284
|
+
Required for stdio mode
|
|
241
285
|
|
|
242
286
|
TRANSPORT Transport mode (optional, default: stdio)
|
|
243
287
|
- stdio: For local CLI integration
|
|
@@ -252,9 +296,8 @@ EXAMPLES:
|
|
|
252
296
|
FORMBRO_API_TOKEN=your-token \\
|
|
253
297
|
formbro-mcp-server
|
|
254
298
|
|
|
255
|
-
# Run with HTTP transport
|
|
299
|
+
# Run with HTTP transport
|
|
256
300
|
FORMBRO_API_URL=https://api.formbro.com \\
|
|
257
|
-
FORMBRO_API_TOKEN=your-token \\
|
|
258
301
|
TRANSPORT=http \\
|
|
259
302
|
PORT=8080 \\
|
|
260
303
|
formbro-mcp-server
|
|
@@ -270,7 +313,8 @@ AVAILABLE TOOLS:
|
|
|
270
313
|
|
|
271
314
|
CONNECTING FROM CLAUDE CODE:
|
|
272
315
|
# For HTTP transport
|
|
273
|
-
claude mcp add --transport http formbro http://localhost:3000/mcp
|
|
316
|
+
claude mcp add --transport http formbro http://localhost:3000/mcp \\
|
|
317
|
+
--header "Authorization: Bearer YOUR_FORMBRO_API_TOKEN"
|
|
274
318
|
|
|
275
319
|
# For stdio transport
|
|
276
320
|
claude mcp add --transport stdio formbro -- \\
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,13 @@ export declare function getApiClient(): AxiosInstance;
|
|
|
23
23
|
* Make an API request to FormBro backend
|
|
24
24
|
*/
|
|
25
25
|
export declare function makeApiRequest<T>(endpoint: string, method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE", data?: unknown, params?: Record<string, unknown>): Promise<T>;
|
|
26
|
+
export interface BinaryApiResponse {
|
|
27
|
+
data: Buffer;
|
|
28
|
+
contentType: string;
|
|
29
|
+
filename?: string;
|
|
30
|
+
contentDisposition?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function makeApiBinaryRequest(endpoint: string, method?: "GET" | "POST", data?: unknown, params?: Record<string, unknown>): Promise<BinaryApiResponse>;
|
|
26
33
|
/**
|
|
27
34
|
* Handle API errors and return user-friendly messages
|
|
28
35
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/services/api-client.ts"],"names":[],"mappings":"AAEA,OAAc,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/services/api-client.ts"],"names":[],"mappings":"AAEA,OAAc,EAAE,aAAa,EAA6D,MAAM,OAAO,CAAC;AAWxG;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAWxE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAarE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAE5E;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,aAAa,CAW5C;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,CAAC,EACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAgB,EAC3D,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC,CAiBZ;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAsCD,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,KAAK,GAAG,MAAc,EAC9B,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAwC5B;AAiCD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CA8BrD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAE1C"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// FormBro API Client with Token Authentication
|
|
2
2
|
import axios, { AxiosError } from "axios";
|
|
3
3
|
import { API_TIMEOUT } from "../constants.js";
|
|
4
|
+
import { generateIdempotencyKey } from "./idempotency.js";
|
|
4
5
|
let defaultApiClient = null;
|
|
5
6
|
let defaultBaseUrl = null;
|
|
6
7
|
// AsyncLocalStorage for per-request API client
|
|
@@ -68,14 +69,123 @@ export function getApiClient() {
|
|
|
68
69
|
*/
|
|
69
70
|
export async function makeApiRequest(endpoint, method = "GET", data, params) {
|
|
70
71
|
const client = getApiClient();
|
|
72
|
+
// Auto-inject Idempotency-Key for mutating requests
|
|
73
|
+
const extraHeaders = {};
|
|
74
|
+
if (method !== "GET") {
|
|
75
|
+
extraHeaders["Idempotency-Key"] = generateIdempotencyKey(method.toLowerCase());
|
|
76
|
+
}
|
|
71
77
|
const response = await client.request({
|
|
72
78
|
method,
|
|
73
79
|
url: endpoint,
|
|
74
80
|
data,
|
|
75
|
-
params
|
|
81
|
+
params,
|
|
82
|
+
headers: extraHeaders
|
|
76
83
|
});
|
|
77
84
|
return response.data;
|
|
78
85
|
}
|
|
86
|
+
function getHeader(headers, name) {
|
|
87
|
+
const value = headers[name] ?? headers[name.toLowerCase()];
|
|
88
|
+
if (Array.isArray(value))
|
|
89
|
+
return value[0];
|
|
90
|
+
return typeof value === "string" ? value : undefined;
|
|
91
|
+
}
|
|
92
|
+
function parseFilename(contentDisposition) {
|
|
93
|
+
if (!contentDisposition)
|
|
94
|
+
return undefined;
|
|
95
|
+
const filenameStar = /filename\*=UTF-8''([^;]+)/i.exec(contentDisposition);
|
|
96
|
+
if (filenameStar?.[1]) {
|
|
97
|
+
return decodeURIComponent(filenameStar[1].replace(/^"|"$/g, ""));
|
|
98
|
+
}
|
|
99
|
+
const filename = /filename="?([^";]+)"?/i.exec(contentDisposition);
|
|
100
|
+
return filename?.[1];
|
|
101
|
+
}
|
|
102
|
+
function decodeBinaryErrorData(error) {
|
|
103
|
+
const data = error.response?.data;
|
|
104
|
+
if (!(data instanceof ArrayBuffer) && !Buffer.isBuffer(data))
|
|
105
|
+
return;
|
|
106
|
+
const buffer = Buffer.isBuffer(data) ? data : Buffer.from(new Uint8Array(data));
|
|
107
|
+
const text = buffer.toString("utf8").trim();
|
|
108
|
+
if (!text)
|
|
109
|
+
return;
|
|
110
|
+
try {
|
|
111
|
+
error.response.data = JSON.parse(text);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
error.response.data = { detail: text };
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
export async function makeApiBinaryRequest(endpoint, method = "GET", data, params) {
|
|
118
|
+
const client = getApiClient();
|
|
119
|
+
const extraHeaders = {
|
|
120
|
+
Accept: [
|
|
121
|
+
"application/pdf",
|
|
122
|
+
"application/zip",
|
|
123
|
+
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
124
|
+
"application/octet-stream",
|
|
125
|
+
].join(", "),
|
|
126
|
+
};
|
|
127
|
+
if (method !== "GET") {
|
|
128
|
+
extraHeaders["Idempotency-Key"] = generateIdempotencyKey(method.toLowerCase());
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
const response = await client.request({
|
|
132
|
+
method,
|
|
133
|
+
url: endpoint,
|
|
134
|
+
data,
|
|
135
|
+
params,
|
|
136
|
+
responseType: "arraybuffer",
|
|
137
|
+
headers: extraHeaders,
|
|
138
|
+
});
|
|
139
|
+
const contentType = getHeader(response.headers, "content-type") ?? "application/octet-stream";
|
|
140
|
+
const contentDisposition = getHeader(response.headers, "content-disposition");
|
|
141
|
+
return {
|
|
142
|
+
data: Buffer.from(response.data),
|
|
143
|
+
contentType,
|
|
144
|
+
filename: parseFilename(contentDisposition),
|
|
145
|
+
contentDisposition,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
if (error instanceof AxiosError) {
|
|
150
|
+
decodeBinaryErrorData(error);
|
|
151
|
+
}
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Format API error detail into a human-readable string.
|
|
157
|
+
* FastAPI 422 returns detail as an array of {type, loc, msg, input, ctx} objects.
|
|
158
|
+
*/
|
|
159
|
+
function formatErrorDetail(detail) {
|
|
160
|
+
if (!detail)
|
|
161
|
+
return "";
|
|
162
|
+
if (typeof detail === "string")
|
|
163
|
+
return detail;
|
|
164
|
+
if (Array.isArray(detail)) {
|
|
165
|
+
return detail
|
|
166
|
+
.map((d) => {
|
|
167
|
+
if (typeof d === "string")
|
|
168
|
+
return d;
|
|
169
|
+
if (d && typeof d === "object") {
|
|
170
|
+
const obj = d;
|
|
171
|
+
const loc = Array.isArray(obj.loc) ? obj.loc.join(".") : "";
|
|
172
|
+
const msg = typeof obj.msg === "string" ? obj.msg : JSON.stringify(obj);
|
|
173
|
+
return loc ? `${loc}: ${msg}` : msg;
|
|
174
|
+
}
|
|
175
|
+
return String(d);
|
|
176
|
+
})
|
|
177
|
+
.join("; ");
|
|
178
|
+
}
|
|
179
|
+
if (typeof detail === "object") {
|
|
180
|
+
try {
|
|
181
|
+
return JSON.stringify(detail);
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return String(detail);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return String(detail);
|
|
188
|
+
}
|
|
79
189
|
/**
|
|
80
190
|
* Handle API errors and return user-friendly messages
|
|
81
191
|
*/
|
|
@@ -83,7 +193,8 @@ export function handleApiError(error) {
|
|
|
83
193
|
if (error instanceof AxiosError) {
|
|
84
194
|
if (error.response) {
|
|
85
195
|
const status = error.response.status;
|
|
86
|
-
const
|
|
196
|
+
const rawDetail = error.response.data?.detail || error.response.data?.message;
|
|
197
|
+
const detail = formatErrorDetail(rawDetail);
|
|
87
198
|
switch (status) {
|
|
88
199
|
case 401:
|
|
89
200
|
return "Error: Authentication failed. Please check your FORMBRO_API_TOKEN is valid.";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/services/api-client.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,OAAO,KAAK,EAAE,EAAiB,UAAU,
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/services/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../src/services/idempotency.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE/D"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
/**
|
|
3
|
+
* Generate a unique idempotency key for a given tool name.
|
|
4
|
+
* Format: {toolName}-{uuid}
|
|
5
|
+
*/
|
|
6
|
+
export function generateIdempotencyKey(toolName) {
|
|
7
|
+
return `${toolName}-${randomUUID()}`;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=idempotency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/services/idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,OAAO,GAAG,QAAQ,IAAI,UAAU,EAAE,EAAE,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applications-extra.d.ts","sourceRoot":"","sources":["../../src/tools/applications-extra.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAepE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2D9D"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { makeApiRequest, handleApiError } from "../services/api-client.js";
|
|
3
|
+
const ListByStatusSchema = z.object({
|
|
4
|
+
status: z.string().describe("Application status e.g. 'ready_to_submit', 'in_review'"),
|
|
5
|
+
program_key: z.string().optional(),
|
|
6
|
+
days_in_status: z.number().int().nonnegative().optional(),
|
|
7
|
+
limit: z.number().int().positive().max(100).default(20),
|
|
8
|
+
}).strict();
|
|
9
|
+
const ApplicationIdSchema = z.object({
|
|
10
|
+
application_id: z.string().describe("MongoDB ObjectId of the application"),
|
|
11
|
+
}).strict();
|
|
12
|
+
export function registerReadExtraTools(server) {
|
|
13
|
+
server.registerTool("list_applications_by_status", {
|
|
14
|
+
title: "List Applications by Status",
|
|
15
|
+
description: "Find applications by status (e.g., 'ready_to_submit', 'in_review'). Optionally filter by program_key or days_in_status.",
|
|
16
|
+
inputSchema: ListByStatusSchema,
|
|
17
|
+
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
|
|
18
|
+
}, async ({ status, program_key, days_in_status, limit }) => {
|
|
19
|
+
try {
|
|
20
|
+
const queryParams = { status, limit };
|
|
21
|
+
if (program_key)
|
|
22
|
+
queryParams.program_key = program_key;
|
|
23
|
+
if (days_in_status !== undefined)
|
|
24
|
+
queryParams.days_in_status = days_in_status;
|
|
25
|
+
const data = await makeApiRequest("/api/dashboard/applications", "GET", undefined, queryParams);
|
|
26
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
server.registerTool("get_application_persons", {
|
|
33
|
+
title: "Get Application Persons",
|
|
34
|
+
description: "List all persons (applicant, spouse, dependents, sponsor, co_signer, employer, rcic) attached to an application.",
|
|
35
|
+
inputSchema: ApplicationIdSchema,
|
|
36
|
+
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
37
|
+
}, async ({ application_id }) => {
|
|
38
|
+
try {
|
|
39
|
+
const data = await makeApiRequest(`/api/applications/${encodeURIComponent(application_id)}/persons`, "GET");
|
|
40
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
server.registerTool("get_documents_for_application", {
|
|
47
|
+
title: "Get Application Documents",
|
|
48
|
+
description: "List all upload_slots and uploaded files for an application.",
|
|
49
|
+
inputSchema: ApplicationIdSchema,
|
|
50
|
+
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
51
|
+
}, async ({ application_id }) => {
|
|
52
|
+
try {
|
|
53
|
+
const data = await makeApiRequest(`/api/applications/${encodeURIComponent(application_id)}`, "GET");
|
|
54
|
+
const slots = data?.upload_slots ?? [];
|
|
55
|
+
return { content: [{ type: "text", text: JSON.stringify(slots, null, 2) }] };
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
return { isError: true, content: [{ type: "text", text: handleApiError(error) }] };
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=applications-extra.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applications-extra.js","sourceRoot":"","sources":["../../src/tools/applications-extra.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/tools/audit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0B1D"}
|