@sfranalytics/mcp 0.6.2 → 0.6.3

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 (42) hide show
  1. package/README.md +67 -50
  2. package/dist/analytics/logger.d.ts +3 -0
  3. package/dist/analytics/logger.js +39 -0
  4. package/dist/analytics/logger.js.map +1 -0
  5. package/dist/analytics/requestContext.d.ts +21 -0
  6. package/dist/analytics/requestContext.js +39 -0
  7. package/dist/analytics/requestContext.js.map +1 -0
  8. package/dist/analytics/sanitize.d.ts +1 -0
  9. package/dist/analytics/sanitize.js +78 -0
  10. package/dist/analytics/sanitize.js.map +1 -0
  11. package/dist/http.js +193 -40
  12. package/dist/http.js.map +1 -1
  13. package/dist/index.js +17 -4
  14. package/dist/index.js.map +1 -1
  15. package/dist/landing.d.ts +3 -0
  16. package/dist/landing.js +891 -0
  17. package/dist/landing.js.map +1 -0
  18. package/dist/server.d.ts +5 -1
  19. package/dist/server.js +12 -4
  20. package/dist/server.js.map +1 -1
  21. package/dist/services/httpClient.d.ts +22 -0
  22. package/dist/services/httpClient.js +147 -26
  23. package/dist/services/httpClient.js.map +1 -1
  24. package/dist/tools/formatters.js +29 -1
  25. package/dist/tools/formatters.js.map +1 -1
  26. package/dist/tools/health.js +84 -7
  27. package/dist/tools/health.js.map +1 -1
  28. package/dist/tools/plr/borrowerContacts.js +47 -10
  29. package/dist/tools/plr/borrowerContacts.js.map +1 -1
  30. package/dist/tools/plr/borrowerProfile.js +11 -5
  31. package/dist/tools/plr/borrowerProfile.js.map +1 -1
  32. package/dist/tools/registerToolSafe.d.ts +5 -1
  33. package/dist/tools/registerToolSafe.js +110 -4
  34. package/dist/tools/registerToolSafe.js.map +1 -1
  35. package/dist/tools/sfr/rentalStats.js +19 -3
  36. package/dist/tools/sfr/rentalStats.js.map +1 -1
  37. package/dist/tools/sfr/topBuyers.js +1 -0
  38. package/dist/tools/sfr/topBuyers.js.map +1 -1
  39. package/dist/tools/welcome.d.ts +3 -0
  40. package/dist/tools/welcome.js +58 -0
  41. package/dist/tools/welcome.js.map +1 -0
  42. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"landing.js","sourceRoot":"","sources":["../src/landing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,2EAA2E;AAC3E,MAAM,QAAQ,GAAG,04NAA04N,CAAC;AAE55N,MAAM,UAAU,iBAAiB,CAAC,IAAkC;IAClE,MAAM,OAAO,GAAG,IAAI,EAAE,cAAc,IAAI,EAAE,CAAC;IAC3C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uFAoc8E,QAAQ;;;;;uCAKxD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAwJzB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBA0PvB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;QAwBrB,CAAC;AACT,CAAC"}
package/dist/server.d.ts CHANGED
@@ -1,3 +1,7 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import type { AppConfig } from "./config.js";
3
- export declare function createServer(config: AppConfig): McpServer;
3
+ export type CreateServerResult = {
4
+ server: McpServer;
5
+ toolNames: string[];
6
+ };
7
+ export declare function createServer(config: AppConfig): CreateServerResult;
package/dist/server.js CHANGED
@@ -3,8 +3,10 @@ import { VERSION } from "./version.js";
3
3
  import { HttpClient } from "./services/httpClient.js";
4
4
  import { SfrClient } from "./services/sfr.js";
5
5
  import { PlrClient } from "./services/plr.js";
6
- // Tool registrations Health
6
+ import { clearToolRegistry, getRegisteredToolNames } from "./tools/registerToolSafe.js";
7
+ // Tool registrations — Health & Welcome
7
8
  import { registerHealthTool } from "./tools/health.js";
9
+ import { registerWelcomeTool } from "./tools/welcome.js";
8
10
  // SFR Tools
9
11
  import { registerSearchPropertiesTool } from "./tools/sfr/searchProperties.js";
10
12
  import { registerGetPropertyTool } from "./tools/sfr/getProperty.js";
@@ -60,7 +62,11 @@ import { registerHviTrendTool } from "./tools/snowflake/hviTrend.js";
60
62
  import { initSnowflake } from "./services/snowflake.js";
61
63
  function buildInstructions(hasSfr, hasPlr, hasSnowflake) {
62
64
  const sections = [
63
- "SFR Analytics MCP — real estate investment data for single-family rental (SFR) markets.",
65
+ "SFR Analytics MCP — real estate investment data for single-family residential (SFR) markets.",
66
+ "",
67
+ "GETTING STARTED:",
68
+ " First time? Call sfra_welcome to confirm which APIs are connected and get recommended next steps.",
69
+ " Already set up? Jump to a workflow below or use a prompt (market-screen, property-analysis, lending-overview).",
64
70
  "",
65
71
  ];
66
72
  sections.push("DATA SOURCES:");
@@ -110,6 +116,7 @@ function buildInstructions(hasSfr, hasPlr, hasSnowflake) {
110
116
  return sections.join("\n");
111
117
  }
112
118
  export function createServer(config) {
119
+ clearToolRegistry();
113
120
  const hasSfr = config.sfr !== null;
114
121
  const hasPlr = config.plr !== null;
115
122
  const hasSnowflake = config.snowflake !== null;
@@ -138,8 +145,9 @@ export function createServer(config) {
138
145
  capabilities: { logging: {} },
139
146
  instructions: buildInstructions(hasSfr, hasPlr, hasSnowflake),
140
147
  });
141
- // Health — always registered, checks only configured APIs
148
+ // Health & Welcome — always registered, checks only configured APIs
142
149
  registerHealthTool(server, sfrClient, plrClient, config);
150
+ registerWelcomeTool(server, config);
143
151
  // SFR Tools
144
152
  if (sfrClient) {
145
153
  // Properties (6)
@@ -208,6 +216,6 @@ export function createServer(config) {
208
216
  }
209
217
  // Example prompts — scoped to available APIs
210
218
  registerPrompts(server, hasSfr, hasPlr);
211
- return server;
219
+ return { server, toolNames: getRegisteredToolNames() };
212
220
  }
213
221
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -8,12 +8,34 @@ export type HttpClientOptions = {
8
8
  baseUrl: string;
9
9
  defaultHeaders: Record<string, string>;
10
10
  timeoutMs: number;
11
+ circuitBreaker?: {
12
+ /** Consecutive transient failures required to open circuit (default: 3). */
13
+ failureThreshold?: number;
14
+ /** Open-state cooldown before half-open probe in ms (default: 30000). */
15
+ resetTimeoutMs?: number;
16
+ };
17
+ retry?: {
18
+ /** Number of retries after the first attempt (default: 2). */
19
+ maxRetries?: number;
20
+ /** Delay before first retry in ms (default: 1000). */
21
+ initialDelayMs?: number;
22
+ /** Multiplier applied per retry attempt (default: 3 => 1s, 3s). */
23
+ backoffMultiplier?: number;
24
+ /** HTTP status codes considered transient (default: 502/503/504). */
25
+ retryOnStatuses?: number[];
26
+ };
11
27
  };
28
+ type CircuitState = "closed" | "open" | "half_open";
12
29
  export declare class HttpClient {
13
30
  private readonly opts;
31
+ private readonly circuitBreaker;
14
32
  constructor(opts: HttpClientOptions);
33
+ getCircuitState(): CircuitState;
34
+ private isTransientNetworkError;
35
+ private isTransientForCircuit;
15
36
  request<T>(method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE", path: string, init?: {
16
37
  query?: Record<string, string | number | boolean | undefined | unknown>;
17
38
  body?: unknown;
18
39
  }): Promise<T>;
19
40
  }
41
+ export {};
@@ -11,10 +11,85 @@ export class ApiError extends Error {
11
11
  this.name = "ApiError";
12
12
  }
13
13
  }
14
+ class CircuitBreaker {
15
+ failureThreshold;
16
+ resetTimeoutMs;
17
+ state = "closed";
18
+ failures = 0;
19
+ lastFailureTime = 0;
20
+ probeInFlight = false;
21
+ constructor(failureThreshold, resetTimeoutMs) {
22
+ this.failureThreshold = failureThreshold;
23
+ this.resetTimeoutMs = resetTimeoutMs;
24
+ }
25
+ canRequest(now = Date.now()) {
26
+ if (this.state === "closed")
27
+ return true;
28
+ if (this.state === "open") {
29
+ if (now - this.lastFailureTime >= this.resetTimeoutMs) {
30
+ this.state = "half_open";
31
+ }
32
+ else {
33
+ return false;
34
+ }
35
+ }
36
+ if (this.probeInFlight)
37
+ return false;
38
+ this.probeInFlight = true;
39
+ return true;
40
+ }
41
+ onSuccess() {
42
+ this.failures = 0;
43
+ this.state = "closed";
44
+ this.probeInFlight = false;
45
+ }
46
+ onTransientFailure(now = Date.now()) {
47
+ this.failures += 1;
48
+ this.lastFailureTime = now;
49
+ this.probeInFlight = false;
50
+ if (this.state === "half_open" || this.failures >= this.failureThreshold) {
51
+ this.state = "open";
52
+ }
53
+ }
54
+ onNonTransientFailure() {
55
+ if (this.state === "half_open") {
56
+ // Service is reachable (e.g., 4xx). Close the circuit and reset counts.
57
+ this.state = "closed";
58
+ this.failures = 0;
59
+ }
60
+ this.probeInFlight = false;
61
+ }
62
+ getState() {
63
+ return this.state;
64
+ }
65
+ getFailures() {
66
+ return this.failures;
67
+ }
68
+ getRetryAfterMs(now = Date.now()) {
69
+ if (this.state !== "open")
70
+ return 0;
71
+ return Math.max(0, this.resetTimeoutMs - (now - this.lastFailureTime));
72
+ }
73
+ }
14
74
  export class HttpClient {
15
75
  opts;
76
+ circuitBreaker;
16
77
  constructor(opts) {
17
78
  this.opts = opts;
79
+ this.circuitBreaker = new CircuitBreaker(opts.circuitBreaker?.failureThreshold ?? 3, opts.circuitBreaker?.resetTimeoutMs ?? 30_000);
80
+ }
81
+ getCircuitState() {
82
+ return this.circuitBreaker.getState();
83
+ }
84
+ isTransientNetworkError(err) {
85
+ return (err instanceof TypeError &&
86
+ /fetch failed|network|socket|econnreset|econnrefused/i.test(err.message));
87
+ }
88
+ isTransientForCircuit(err, retryStatuses) {
89
+ if (err instanceof ApiError) {
90
+ return err.status === 408 || retryStatuses.includes(err.status);
91
+ }
92
+ return this.isTransientNetworkError(err);
18
93
  }
19
94
  async request(method, path, init) {
20
95
  const url = new URL(this.opts.baseUrl + path);
@@ -34,40 +109,86 @@ export class HttpClient {
34
109
  }
35
110
  }
36
111
  }
37
- const controller = new AbortController();
38
- const t = setTimeout(() => controller.abort(), this.opts.timeoutMs);
39
- try {
40
- const res = await fetch(url, {
41
- method,
42
- headers: {
43
- "User-Agent": `@sfranalytics/mcp/${VERSION}`,
44
- ...this.opts.defaultHeaders,
45
- ...(init?.body ? { "Content-Type": "application/json" } : {}),
112
+ const maxRetries = this.opts.retry?.maxRetries ?? 2;
113
+ const initialDelayMs = this.opts.retry?.initialDelayMs ?? 1000;
114
+ const backoffMultiplier = this.opts.retry?.backoffMultiplier ?? 3;
115
+ const retryStatuses = this.opts.retry?.retryOnStatuses ?? [502, 503, 504];
116
+ if (!this.circuitBreaker.canRequest()) {
117
+ const retryAfterMs = this.circuitBreaker.getRetryAfterMs();
118
+ throw new ApiError(`Service temporarily unavailable (circuit breaker open, retry in ~${Math.ceil(retryAfterMs / 1000)}s)`, 503, url.toString(), {
119
+ circuitBreaker: {
120
+ state: this.circuitBreaker.getState(),
121
+ failures: this.circuitBreaker.getFailures(),
122
+ retryAfterMs,
46
123
  },
47
- body: init?.body ? JSON.stringify(init.body) : undefined,
48
- signal: controller.signal,
49
124
  });
50
- const contentType = res.headers.get("content-type") ?? "";
51
- const isJson = contentType.includes("application/json");
52
- const payload = isJson
53
- ? await res.json().catch(() => undefined)
54
- : await res.text().catch(() => "");
55
- if (!res.ok) {
56
- throw new ApiError(`HTTP ${res.status} ${method} ${path}`, res.status, url.toString(), payload);
125
+ }
126
+ let attempt = 0;
127
+ // All current endpoints are read-only analytics queries, including POST filters.
128
+ // Retry transient gateway/service failures to smooth provider-side blips.
129
+ try {
130
+ while (true) {
131
+ const controller = new AbortController();
132
+ const t = setTimeout(() => controller.abort(), this.opts.timeoutMs);
133
+ try {
134
+ const res = await fetch(url, {
135
+ method,
136
+ headers: {
137
+ "User-Agent": `@sfranalytics/mcp/${VERSION}`,
138
+ ...this.opts.defaultHeaders,
139
+ ...(init?.body ? { "Content-Type": "application/json" } : {}),
140
+ },
141
+ body: init?.body ? JSON.stringify(init.body) : undefined,
142
+ signal: controller.signal,
143
+ });
144
+ const contentType = res.headers.get("content-type") ?? "";
145
+ const isJson = contentType.includes("application/json");
146
+ const payload = isJson
147
+ ? await res.json().catch(() => undefined)
148
+ : await res.text().catch(() => "");
149
+ if (!res.ok) {
150
+ const apiErr = new ApiError(`HTTP ${res.status} ${method} ${path}`, res.status, url.toString(), payload);
151
+ const canRetry = attempt < maxRetries && retryStatuses.includes(res.status);
152
+ if (canRetry) {
153
+ const delayMs = Math.round(initialDelayMs * Math.pow(backoffMultiplier, attempt));
154
+ attempt += 1;
155
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
156
+ continue;
157
+ }
158
+ throw apiErr;
159
+ }
160
+ this.circuitBreaker.onSuccess();
161
+ return payload;
162
+ }
163
+ catch (err) {
164
+ if (err instanceof ApiError)
165
+ throw err;
166
+ if (err instanceof Error && err.name === "AbortError") {
167
+ throw new ApiError(`Timeout after ${this.opts.timeoutMs}ms`, 408, url.toString());
168
+ }
169
+ const canRetryNetworkError = attempt < maxRetries && this.isTransientNetworkError(err);
170
+ if (canRetryNetworkError) {
171
+ const delayMs = Math.round(initialDelayMs * Math.pow(backoffMultiplier, attempt));
172
+ attempt += 1;
173
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
174
+ continue;
175
+ }
176
+ throw err;
177
+ }
178
+ finally {
179
+ clearTimeout(t);
180
+ }
57
181
  }
58
- return payload;
59
182
  }
60
183
  catch (err) {
61
- if (err instanceof ApiError)
62
- throw err;
63
- if (err instanceof Error && err.name === "AbortError") {
64
- throw new ApiError(`Timeout after ${this.opts.timeoutMs}ms`, 408, url.toString());
184
+ if (this.isTransientForCircuit(err, retryStatuses)) {
185
+ this.circuitBreaker.onTransientFailure();
186
+ }
187
+ else {
188
+ this.circuitBreaker.onNonTransientFailure();
65
189
  }
66
190
  throw err;
67
191
  }
68
- finally {
69
- clearTimeout(t);
70
- }
71
192
  }
72
193
  }
73
194
  //# sourceMappingURL=httpClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"httpClient.js","sourceRoot":"","sources":["../../src/services/httpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGf;IACA;IACA;IAJlB,YACE,OAAe,EACC,MAAc,EACd,GAAW,EACX,OAAiB;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,WAAM,GAAN,MAAM,CAAQ;QACd,QAAG,GAAH,GAAG,CAAQ;QACX,YAAO,GAAP,OAAO,CAAU;QAGjC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAQD,MAAM,OAAO,UAAU;IACQ;IAA7B,YAA6B,IAAuB;QAAvB,SAAI,GAAJ,IAAI,CAAmB;IAAG,CAAC;IAExD,KAAK,CAAC,OAAO,CACX,MAAmD,EACnD,IAAY,EACZ,IAGC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QAE9C,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;YAChB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,KAAK,SAAS;oBAAE,SAAS;gBAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrB,KAAK,MAAM,IAAI,IAAI,CAAC;wBAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjE,CAAC;qBAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC/C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEpE,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC3B,MAAM;gBACN,OAAO,EAAE;oBACP,YAAY,EAAE,qBAAqB,OAAO,EAAE;oBAC5C,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc;oBAC3B,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9D;gBACD,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;gBACxD,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,MAAM;gBACpB,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;gBACzC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAErC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,QAAQ,CAChB,QAAQ,GAAG,CAAC,MAAM,IAAI,MAAM,IAAI,IAAI,EAAE,EACtC,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,QAAQ,EAAE,EACd,OAAO,CACR,CAAC;YACJ,CAAC;YAED,OAAO,OAAY,CAAC;QACtB,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,GAAG,YAAY,QAAQ;gBAAE,MAAM,GAAG,CAAC;YACvC,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACtD,MAAM,IAAI,QAAQ,CAChB,iBAAiB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,EACxC,GAAG,EACH,GAAG,CAAC,QAAQ,EAAE,CACf,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"httpClient.js","sourceRoot":"","sources":["../../src/services/httpClient.ts"],"names":[],"mappings":"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"}
@@ -140,9 +140,36 @@ function sanitizeErrorDetail(raw, maxLen = 500) {
140
140
  */
141
141
  export function handleToolError(err, toolName) {
142
142
  let detail;
143
+ const hints = [];
143
144
  if (err instanceof ApiError) {
145
+ const detailsRecord = typeof err.details === "object" && err.details !== null
146
+ ? err.details
147
+ : null;
148
+ const breakerState = detailsRecord &&
149
+ typeof detailsRecord.circuitBreaker === "object" &&
150
+ detailsRecord.circuitBreaker !== null
151
+ ? detailsRecord.circuitBreaker.state
152
+ : null;
144
153
  const raw = err.details != null ? JSON.stringify(err.details) : (err.message || "unknown api error");
145
154
  detail = `HTTP ${err.status} - ${sanitizeErrorDetail(raw)}`;
155
+ if (err.status === 408) {
156
+ if (toolName === "sfr_rental_stats") {
157
+ hints.push("State-level rental stats can timeout. Try city or zip scope instead.");
158
+ }
159
+ else if (toolName === "sfr_rental_market_analysis") {
160
+ hints.push("Try geography_type='city' with fewer locations and a shorter date range.");
161
+ }
162
+ else {
163
+ hints.push("The query timed out. Try narrowing filters or reducing scope.");
164
+ }
165
+ hints.push("Use sfra_health to verify upstream responsiveness before retrying.");
166
+ }
167
+ if ([502, 503, 504].includes(err.status)) {
168
+ hints.push(`Upstream API unavailable (HTTP ${err.status}). Use sfra_health to check status, then retry in 30-60s.`);
169
+ }
170
+ if (breakerState === "open" || /circuit breaker/i.test(err.message)) {
171
+ hints.push("Multiple recent transient failures tripped the circuit breaker. Requests will auto-resume after cooldown.");
172
+ }
146
173
  }
147
174
  else if (err instanceof Error) {
148
175
  detail = sanitizeErrorDetail(err.message);
@@ -150,7 +177,8 @@ export function handleToolError(err, toolName) {
150
177
  else {
151
178
  detail = sanitizeErrorDetail(String(err));
152
179
  }
153
- return errorContent(`${toolName} failed: ${detail}`);
180
+ const hintText = hints.length > 0 ? ` Hint: ${hints.join(" ")}` : "";
181
+ return errorContent(`${toolName} failed: ${detail}${hintText}`);
154
182
  }
155
183
  /** Format a dollar amount with adaptive B/M/K suffix */
156
184
  export function fmtDollars(v) {
@@ -1 +1 @@
1
- {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/tools/formatters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/tools/formatters.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,67 @@
1
1
  import { z } from "zod";
2
+ import { ApiError } from "../services/httpClient.js";
2
3
  import { structuredResult } from "./formatters.js";
3
4
  import { registerToolSafe } from "./registerToolSafe.js";
5
+ function summarizeProbeError(err) {
6
+ if (err instanceof ApiError)
7
+ return `HTTP ${err.status}`;
8
+ if (err instanceof Error)
9
+ return err.message;
10
+ return String(err);
11
+ }
12
+ async function runSfrProbe(sfr) {
13
+ const t0 = Date.now();
14
+ const health = await sfr.healthCheck();
15
+ let dataProbeOk = null;
16
+ let dataProbeError;
17
+ const dataProbeName = "zip detail (85004)";
18
+ if (typeof sfr.getZipDetail === "function") {
19
+ try {
20
+ await sfr.getZipDetail("85004");
21
+ dataProbeOk = true;
22
+ }
23
+ catch (err) {
24
+ dataProbeOk = false;
25
+ dataProbeError = summarizeProbeError(err);
26
+ }
27
+ }
28
+ return {
29
+ ok: health.ok && (dataProbeOk ?? true),
30
+ latencyMs: Date.now() - t0,
31
+ healthEndpointOk: health.ok,
32
+ dataProbeOk,
33
+ dataProbeName: typeof sfr.getZipDetail === "function" ? dataProbeName : null,
34
+ dataProbeError,
35
+ };
36
+ }
37
+ async function runPlrProbe(plr) {
38
+ const t0 = Date.now();
39
+ const health = await plr.healthCheck();
40
+ let dataProbeOk = null;
41
+ let dataProbeError;
42
+ const dataProbeName = "portfolio summary (Jan 2024)";
43
+ if (typeof plr.portfolioSummary === "function") {
44
+ try {
45
+ await plr.portfolioSummary({
46
+ start_date: "2024-01-01",
47
+ end_date: "2024-01-31",
48
+ });
49
+ dataProbeOk = true;
50
+ }
51
+ catch (err) {
52
+ dataProbeOk = false;
53
+ dataProbeError = summarizeProbeError(err);
54
+ }
55
+ }
56
+ return {
57
+ ok: health.ok && (dataProbeOk ?? true),
58
+ latencyMs: Date.now() - t0,
59
+ healthEndpointOk: health.ok,
60
+ dataProbeOk,
61
+ dataProbeName: typeof plr.portfolioSummary === "function" ? dataProbeName : null,
62
+ dataProbeError,
63
+ };
64
+ }
4
65
  export function registerHealthTool(server, sfr, plr, config) {
5
66
  registerToolSafe(server, "sfra_health", {
6
67
  title: "SFRA MCP health check",
@@ -11,22 +72,38 @@ export function registerHealthTool(server, sfr, plr, config) {
11
72
  }, async () => {
12
73
  const lines = ["## SFRA MCP Health Check", ""];
13
74
  const structured = {};
14
- // Run health checks in parallel when both are configured
75
+ // Run probes in parallel when both are configured.
76
+ // A service is considered OK only if both health endpoint and a real
77
+ // data endpoint probe pass.
15
78
  const [sfrHealth, plrHealth] = await Promise.all([
16
- sfr && config.sfr ? sfr.healthCheck() : null,
17
- plr && config.plr ? plr.healthCheck() : null,
79
+ sfr && config.sfr ? runSfrProbe(sfr) : null,
80
+ plr && config.plr ? runPlrProbe(plr) : null,
18
81
  ]);
19
82
  if (sfrHealth) {
20
- lines.push(`**SFR API**`, ` Status: ${sfrHealth.ok ? "OK" : "FAILED"}`, ` Latency: ${sfrHealth.latencyMs}ms`, "");
21
- structured.sfr = { ok: sfrHealth.ok, latencyMs: sfrHealth.latencyMs };
83
+ lines.push(`**SFR API**`, ` Status: ${sfrHealth.ok ? "OK" : "FAILED"}`, ` Latency: ${sfrHealth.latencyMs}ms`, ` Health endpoint: ${sfrHealth.healthEndpointOk ? "OK" : "FAILED"}`, ` Data probe (${sfrHealth.dataProbeName ?? "not available"}): ${sfrHealth.dataProbeOk == null ? "SKIPPED" : (sfrHealth.dataProbeOk ? "OK" : "FAILED")}`, ...(sfrHealth.dataProbeError ? [` Probe error: ${sfrHealth.dataProbeError}`] : []), "");
84
+ structured.sfr = {
85
+ ok: sfrHealth.ok,
86
+ latencyMs: sfrHealth.latencyMs,
87
+ healthEndpointOk: sfrHealth.healthEndpointOk,
88
+ dataProbeOk: sfrHealth.dataProbeOk,
89
+ dataProbeName: sfrHealth.dataProbeName,
90
+ dataProbeError: sfrHealth.dataProbeError,
91
+ };
22
92
  }
23
93
  else {
24
94
  lines.push("**SFR API** — not configured", " Add SFR_API_TOKEN to enable 21 property, buyer, and market tools", "");
25
95
  structured.sfr = { configured: false };
26
96
  }
27
97
  if (plrHealth) {
28
- lines.push(`**PLR API**`, ` Status: ${plrHealth.ok ? "OK" : "FAILED"}`, ` Latency: ${plrHealth.latencyMs}ms`);
29
- structured.plr = { ok: plrHealth.ok, latencyMs: plrHealth.latencyMs };
98
+ lines.push(`**PLR API**`, ` Status: ${plrHealth.ok ? "OK" : "FAILED"}`, ` Latency: ${plrHealth.latencyMs}ms`, ` Health endpoint: ${plrHealth.healthEndpointOk ? "OK" : "FAILED"}`, ` Data probe (${plrHealth.dataProbeName ?? "not available"}): ${plrHealth.dataProbeOk == null ? "SKIPPED" : (plrHealth.dataProbeOk ? "OK" : "FAILED")}`, ...(plrHealth.dataProbeError ? [` Probe error: ${plrHealth.dataProbeError}`] : []));
99
+ structured.plr = {
100
+ ok: plrHealth.ok,
101
+ latencyMs: plrHealth.latencyMs,
102
+ healthEndpointOk: plrHealth.healthEndpointOk,
103
+ dataProbeOk: plrHealth.dataProbeOk,
104
+ dataProbeName: plrHealth.dataProbeName,
105
+ dataProbeError: plrHealth.dataProbeError,
106
+ };
30
107
  }
31
108
  else {
32
109
  lines.push("**PLR API** — not configured", " Add PLR_API_TOKEN to enable 15 lending and borrower tools");
@@ -1 +1 @@
1
- {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/tools/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,UAAU,kBAAkB,CAChC,MAAiB,EACjB,GAAqB,EACrB,GAAqB,EACrB,MAAiB;IAEjB,gBAAgB,CAAC,MAAM,EACrB,aAAa,EACb;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EACT,6CAA6C;YAC7C,+CAA+C;YAC/C,iDAAiD;QACnD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;KAC1B,EACD,KAAK,IAAI,EAAE;QACT,MAAM,KAAK,GAAa,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;QACzD,MAAM,UAAU,GAA4B,EAAE,CAAC;QAE/C,yDAAyD;QACzD,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC/C,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;YAC5C,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;SAC7C,CAAC,CAAC;QAEH,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,CAAC,IAAI,CACR,aAAa,EACb,aAAa,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,EAC7C,cAAc,SAAS,CAAC,SAAS,IAAI,EACrC,EAAE,CACH,CAAC;YACF,UAAU,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CACR,8BAA8B,EAC9B,oEAAoE,EACpE,EAAE,CACH,CAAC;YACF,UAAU,CAAC,GAAG,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QACzC,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,CAAC,IAAI,CACR,aAAa,EACb,aAAa,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,EAC7C,cAAc,SAAS,CAAC,SAAS,IAAI,CACtC,CAAC;YACF,UAAU,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CACR,8BAA8B,EAC9B,6DAA6D,CAC9D,CAAC;YACF,UAAU,CAAC,GAAG,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QACzC,CAAC;QAED,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;IACxD,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/tools/health.ts"],"names":[],"mappings":"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"}