@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
@@ -18,21 +18,49 @@ export function registerBorrowerContactsTool(server, plr) {
18
18
  inputSchema: Input,
19
19
  }, async (args) => {
20
20
  // API requires borrower_names as a JSON-encoded array in query param
21
- const names = args.borrowerNames.split(",").map((s) => s.trim());
21
+ const normalize = (v) => String(v ?? "").trim().toLowerCase();
22
+ const names = args.borrowerNames
23
+ .split(",")
24
+ .map((s) => s.trim())
25
+ .filter(Boolean);
26
+ const uniqueNames = [...new Set(names)];
22
27
  const query = {
23
- borrower_names: JSON.stringify(names),
28
+ borrower_names: JSON.stringify(uniqueNames),
24
29
  page: args.page,
25
30
  page_size: Math.min(args.pageSize, 25),
26
31
  };
27
32
  if (args.state)
28
33
  query.state = args.state;
29
34
  const data = await plr.borrowerContacts(query);
30
- const items = data?.results ?? data?.data ?? (Array.isArray(data) ? data : []);
35
+ const rawItems = data?.results ?? data?.data ?? (Array.isArray(data) ? data : []);
36
+ const seen = new Set();
37
+ const items = rawItems.filter((c) => {
38
+ const key = [
39
+ normalize(c.buyer_borrower1_name ?? c.borrower_name),
40
+ normalize(c.owner_name),
41
+ normalize(c.first_phone),
42
+ normalize(c.first_email),
43
+ ].join("|");
44
+ if (seen.has(key))
45
+ return false;
46
+ seen.add(key);
47
+ return true;
48
+ });
49
+ const foundBorrowers = new Set(items
50
+ .map((c) => normalize(c.buyer_borrower1_name ?? c.borrower_name))
51
+ .filter(Boolean));
52
+ const missingBorrowers = uniqueNames.filter((n) => !foundBorrowers.has(normalize(n)));
31
53
  const lines = [
32
54
  `## Borrower Contacts — ${args.borrowerNames}`,
33
- `**Results:** ${items.length}`,
55
+ `**Results:** ${items.length} unique contacts (${rawItems.length} raw rows)`,
34
56
  "",
35
57
  ];
58
+ if (rawItems.length > items.length) {
59
+ lines.push(`_Deduplicated ${rawItems.length - items.length} duplicate row(s)._`, "");
60
+ }
61
+ if (missingBorrowers.length > 0) {
62
+ lines.push(`**Missing requested entities:** ${missingBorrowers.join(", ")}`, "");
63
+ }
36
64
  if (items.length > 0) {
37
65
  const rows = items.slice(0, 20).map((c) => [
38
66
  c.buyer_borrower1_name ?? c.borrower_name ?? "—",
@@ -62,12 +90,21 @@ export function registerBorrowerContactsTool(server, plr) {
62
90
  lines.push(truncatedJson(data, 3000));
63
91
  lines.push("```");
64
92
  }
65
- const firstName = args.borrowerNames.split(",")[0].trim();
66
- const actions = [
67
- action("plr_borrower_profile", "Full borrower profile", { borrowerName: firstName }),
68
- action("plr_borrower_loans", "Loan history", { borrowerNames: firstName }),
69
- ];
70
- return structuredResult(lines.join("\n"), { items: items, total: items.length, page: args.page }, actions);
93
+ const firstName = uniqueNames[0];
94
+ const actions = firstName
95
+ ? [
96
+ action("plr_borrower_profile", "Full borrower profile", { borrowerName: firstName }),
97
+ action("plr_borrower_loans", "Loan history", { borrowerNames: firstName }),
98
+ ]
99
+ : [];
100
+ return structuredResult(lines.join("\n"), {
101
+ items,
102
+ total: items.length,
103
+ rawTotal: rawItems.length,
104
+ page: args.page,
105
+ requestedBorrowers: uniqueNames,
106
+ missingBorrowers,
107
+ }, actions);
71
108
  });
72
109
  }
73
110
  //# sourceMappingURL=borrowerContacts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"borrowerContacts.js","sourceRoot":"","sources":["../../../src/tools/plr/borrowerContacts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"borrowerContacts.js","sourceRoot":"","sources":["../../../src/tools/plr/borrowerContacts.ts"],"names":[],"mappings":"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"}
@@ -21,12 +21,18 @@ export function registerBorrowerProfileTool(server, plr) {
21
21
  };
22
22
  if (args.state)
23
23
  query.state = args.state;
24
- const data = await plr.borrowerProfile(query);
25
- // If the profile API succeeds, format normally
26
- if (!data?.error) {
27
- return formatProfileResponse(args, data);
24
+ // Profile endpoint has a known backend bug (json.loads on ARRAY_AGG list)
25
+ // that causes 500 for most borrowers. Try it first, fall back to composite.
26
+ try {
27
+ const data = await plr.borrowerProfile(query);
28
+ if (!data?.error) {
29
+ return formatProfileResponse(args, data);
30
+ }
28
31
  }
29
- // Profile API has a known backend bug — fall back to loans + contacts
32
+ catch {
33
+ // Expected — backend 500 for most borrowers
34
+ }
35
+ // Build composite profile from working endpoints
30
36
  return compositeFallback(plr, args);
31
37
  });
32
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"borrowerProfile.js","sourceRoot":"","sources":["../../../src/tools/plr/borrowerProfile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"borrowerProfile.js","sourceRoot":"","sources":["../../../src/tools/plr/borrowerProfile.ts"],"names":[],"mappings":"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"}
@@ -19,11 +19,15 @@ type ToolCallbackResult = {
19
19
  structuredContent?: Record<string, unknown>;
20
20
  isError?: boolean;
21
21
  };
22
+ /** Clear the registry — call before each createServer() in HTTP mode. */
23
+ export declare function clearToolRegistry(): void;
24
+ /** Returns a snapshot of all registered tool names. */
25
+ export declare function getRegisteredToolNames(): string[];
22
26
  /**
23
27
  * Wrapper around `server.registerTool` that adds:
24
28
  * - readOnlyHint + idempotentHint annotations by default
25
29
  * - automatic try/catch → handleToolError
26
- * - latency logging to stderr (>100ms only)
30
+ * - structured analytics logging to stderr
27
31
  */
28
32
  export declare function registerToolSafe<InputArgs extends undefined | ZodRawShapeCompat | AnySchema = undefined>(server: McpServer, toolName: string, config: ToolConfig<InputArgs>, cb: (args: any) => Promise<ToolCallbackResult>): void;
29
33
  export {};
@@ -1,13 +1,94 @@
1
+ import { getCtx } from "../analytics/requestContext.js";
2
+ import { sanitizeArgs } from "../analytics/sanitize.js";
3
+ import { logEvent } from "../analytics/logger.js";
4
+ import { ApiError } from "../services/httpClient.js";
1
5
  import { handleToolError } from "./formatters.js";
6
+ function truncateErrorMessage(message, maxLen = 500) {
7
+ return message.length > maxLen ? `${message.slice(0, maxLen)}...[truncated]` : message;
8
+ }
9
+ function toToolErrorEvent(err) {
10
+ if (err instanceof ApiError) {
11
+ return {
12
+ kind: "api_error",
13
+ message: truncateErrorMessage(err.message || `HTTP ${err.status}`),
14
+ status: err.status,
15
+ };
16
+ }
17
+ const maybeObj = err;
18
+ if (typeof maybeObj?.name === "string" && maybeObj.name === "ZodError") {
19
+ return {
20
+ kind: "validation",
21
+ message: truncateErrorMessage(typeof maybeObj.message === "string" ? maybeObj.message : "Validation error"),
22
+ };
23
+ }
24
+ if (err instanceof Error) {
25
+ return { kind: "unknown", message: truncateErrorMessage(err.message || "Unknown error") };
26
+ }
27
+ return { kind: "unknown", message: truncateErrorMessage(String(err)) };
28
+ }
29
+ function inferErrorFromResult(result) {
30
+ if (!result.isError)
31
+ return null;
32
+ const text = result.content.find((item) => item.type === "text")?.text;
33
+ const message = text ? text.replace(/^Error:\s*/i, "") : "Tool returned isError=true";
34
+ return {
35
+ kind: "tool_error",
36
+ message: truncateErrorMessage(message),
37
+ };
38
+ }
39
+ function toolCategory(name) {
40
+ if (name === "sfra_health" || name === "sfra_welcome")
41
+ return "health";
42
+ if (name.startsWith("plr_"))
43
+ return "plr";
44
+ if (name.startsWith("sfr_"))
45
+ return "sfr";
46
+ return "other";
47
+ }
48
+ function extractOutputText(result) {
49
+ const texts = result.content
50
+ .filter((c) => c.type === "text" && c.text)
51
+ .map((c) => c.text);
52
+ return texts.length > 0 ? texts.join("\n") : null;
53
+ }
54
+ function extractOutputMeta(result) {
55
+ const raw = JSON.stringify(result);
56
+ const bytes = raw.length;
57
+ const text = extractOutputText(result);
58
+ const sc = result.structuredContent;
59
+ if (!sc)
60
+ return { items: null, bytes, truncated: false, keys: null, text };
61
+ const keys = Object.keys(sc).filter((k) => !k.startsWith("_"));
62
+ const truncated = !!sc._outputMeta?.truncated;
63
+ let items = null;
64
+ if (Array.isArray(sc.items)) {
65
+ items = sc.items.length;
66
+ }
67
+ else if (typeof sc.total === "number") {
68
+ items = sc.total;
69
+ }
70
+ return { items, bytes, truncated, keys, text };
71
+ }
72
+ /** Names of all tools registered via registerToolSafe (populated during createServer). */
73
+ const registeredToolNames = [];
74
+ /** Clear the registry — call before each createServer() in HTTP mode. */
75
+ export function clearToolRegistry() {
76
+ registeredToolNames.length = 0;
77
+ }
78
+ /** Returns a snapshot of all registered tool names. */
79
+ export function getRegisteredToolNames() {
80
+ return [...registeredToolNames];
81
+ }
2
82
  /**
3
83
  * Wrapper around `server.registerTool` that adds:
4
84
  * - readOnlyHint + idempotentHint annotations by default
5
85
  * - automatic try/catch → handleToolError
6
- * - latency logging to stderr (>100ms only)
86
+ * - structured analytics logging to stderr
7
87
  */
8
88
  export function registerToolSafe(server, toolName, config,
9
89
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
90
  cb) {
91
+ registeredToolNames.push(toolName);
11
92
  const mergedConfig = {
12
93
  ...config,
13
94
  annotations: {
@@ -18,18 +99,43 @@ cb) {
18
99
  };
19
100
  server.registerTool(toolName, mergedConfig, async (args) => {
20
101
  const t0 = performance.now();
102
+ const ctx = getCtx();
103
+ const input = sanitizeArgs(args);
104
+ let ok = true;
105
+ let error = null;
106
+ let output = null;
21
107
  try {
22
108
  const result = await cb(args);
109
+ error = inferErrorFromResult(result);
110
+ if (error)
111
+ ok = false;
112
+ output = extractOutputMeta(result);
23
113
  return result;
24
114
  }
25
115
  catch (err) {
116
+ ok = false;
117
+ error = toToolErrorEvent(err);
26
118
  return handleToolError(err, toolName);
27
119
  }
28
120
  finally {
29
121
  const elapsed = performance.now() - t0;
30
- if (elapsed > 100) {
31
- process.stderr.write(`[sfra-mcp] ${toolName}: ${Math.round(elapsed)}ms\n`);
32
- }
122
+ logEvent({
123
+ v: 1,
124
+ event: "tool_call",
125
+ ts: new Date().toISOString(),
126
+ tool: toolName,
127
+ tool_category: toolCategory(toolName),
128
+ latency_ms: Number(elapsed.toFixed(1)),
129
+ ok,
130
+ token_hash: ctx?.tokenHash ?? null,
131
+ token_hash_sfr: ctx?.tokenHashSfr ?? null,
132
+ token_hash_plr: ctx?.tokenHashPlr ?? null,
133
+ request_id: ctx?.requestId ?? null,
134
+ mode: ctx?.mode ?? "stdio",
135
+ input,
136
+ output,
137
+ error,
138
+ });
33
139
  }
34
140
  });
35
141
  }
@@ -1 +1 @@
1
- {"version":3,"file":"registerToolSafe.js","sourceRoot":"","sources":["../../src/tools/registerToolSafe.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAsBlD;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAG9B,MAAiB,EACjB,QAAgB,EAChB,MAA6B;AAC7B,8DAA8D;AAC9D,EAA8C;IAE9C,MAAM,YAAY,GAAG;QACnB,GAAG,MAAM;QACT,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,cAAc,EAAE,IAAI;YACpB,GAAG,MAAM,CAAC,WAAW;SACtB;KACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,QAAQ,EACR,YAAyD,EACzD,KAAK,EAAE,IAAS,EAAE,EAAE;QAClB,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC;gBAAS,CAAC;YACT,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;YACvC,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;gBAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"registerToolSafe.js","sourceRoot":"","sources":["../../src/tools/registerToolSafe.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { z } from "zod";
2
2
  import { structuredResult, kvSummary, markdownTable, truncatedJson } from "../formatters.js";
3
3
  import { action, locationArgs } from "../nextActions.js";
4
4
  import { registerToolSafe } from "../registerToolSafe.js";
5
+ const MAX_STATE_LOOKBACK_DAYS = 90;
5
6
  const Input = z.object({
6
7
  search_type: z
7
8
  .enum(["state", "city", "zip", "county", "neighborhood"])
@@ -24,9 +25,13 @@ export function registerRentalStatsTool(server, sfr) {
24
25
  "For individual rental comps near a specific address, use sfr_rental_comparables.",
25
26
  inputSchema: Input,
26
27
  }, async (args) => {
28
+ const requestedLookBack = args.look_back;
29
+ const effectiveLookBack = args.search_type === "state" && requestedLookBack > MAX_STATE_LOOKBACK_DAYS
30
+ ? MAX_STATE_LOOKBACK_DAYS
31
+ : requestedLookBack;
27
32
  const query = {
28
33
  search_type: args.search_type,
29
- look_back: args.look_back,
34
+ look_back: effectiveLookBack,
30
35
  };
31
36
  if (args.state)
32
37
  query.state = args.state;
@@ -44,9 +49,12 @@ export function registerRentalStatsTool(server, sfr) {
44
49
  const loc = args.zips ?? args.city ?? args.county ?? args.state ?? "All";
45
50
  const lines = [
46
51
  `## Rental Market Stats — ${loc}`,
47
- `_${args.look_back}-day lookback_`,
52
+ `_${effectiveLookBack}-day lookback_`,
48
53
  "",
49
54
  ];
55
+ if (effectiveLookBack !== requestedLookBack) {
56
+ lines.push(`_Adjusted lookback from ${requestedLookBack} to ${effectiveLookBack} days for state-level scope to avoid upstream timeouts/crashes. For wider history, use city/zip queries._`, "");
57
+ }
50
58
  if (data == null) {
51
59
  lines.push("_No data returned. The query may be too broad (e.g. state-level) — try narrowing to a city or zip._");
52
60
  return structuredResult(lines.join("\n"), { location: { search_type: args.search_type, value: loc }, error: "no_data" });
@@ -105,7 +113,15 @@ export function registerRentalStatsTool(server, sfr) {
105
113
  .map(([price, count]) => ({ price, count }));
106
114
  }
107
115
  structured.location = { search_type: args.search_type, value: loc };
108
- structured.lookBack = args.look_back;
116
+ structured.lookBack = effectiveLookBack;
117
+ if (effectiveLookBack !== requestedLookBack) {
118
+ structured.lookBackRequested = requestedLookBack;
119
+ structured.queryAdjustment = {
120
+ field: "look_back",
121
+ reason: "state_scope_guardrail",
122
+ maxAllowed: MAX_STATE_LOOKBACK_DAYS,
123
+ };
124
+ }
109
125
  const locArgs = locationArgs(args);
110
126
  const actions = [
111
127
  ...(args.zips ? [action("sfr_zip_detail", "Deep-dive zip metrics", { zipCode: args.zips.split(",")[0] })] : []),
@@ -1 +1 @@
1
- {"version":3,"file":"rentalStats.js","sourceRoot":"","sources":["../../../src/tools/sfr/rentalStats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rentalStats.js","sourceRoot":"","sources":["../../../src/tools/sfr/rentalStats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;IACrB,WAAW,EAAE,CAAC;SACX,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;SACxD,QAAQ,CAAC,sBAAsB,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IACtE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACjE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAC/E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;IACrD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2HAA2H,CAAC;IACzK,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC/E,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;CAC/F,CAAC,CAAC;AAEH,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,GAAc;IACvE,gBAAgB,CAAC,MAAM,EACrB,kBAAkB,EAClB;QACE,KAAK,EAAE,gCAAgC;QACvC,WAAW,EACT,uFAAuF;YACvF,gFAAgF;YAChF,uEAAuE;YACvE,2CAA2C;YAC3C,kFAAkF;QACpF,WAAW,EAAE,KAAK;KACnB,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACX,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC;QACzC,MAAM,iBAAiB,GACrB,IAAI,CAAC,WAAW,KAAK,OAAO,IAAI,iBAAiB,GAAG,uBAAuB;YACzE,CAAC,CAAC,uBAAuB;YACzB,CAAC,CAAC,iBAAiB,CAAC;QACxB,MAAM,KAAK,GAA4B;YACrC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,iBAAiB;SAC7B,CAAC;QACF,IAAI,IAAI,CAAC,KAAK;YAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzC,IAAI,IAAI,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtC,IAAI,IAAI,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtC,IAAI,IAAI,CAAC,MAAM;YAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5C,IAAI,IAAI,CAAC,YAAY;YAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAC9D,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAElD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAQ,CAAC;QAEpD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;QACzE,MAAM,KAAK,GAAG;YACZ,4BAA4B,GAAG,EAAE;YACjC,IAAI,iBAAiB,gBAAgB;YACrC,EAAE;SACH,CAAC;QACF,IAAI,iBAAiB,KAAK,iBAAiB,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CACR,2BAA2B,iBAAiB,OAAO,iBAAiB,2GAA2G,EAC/K,EAAE,CACH,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,qGAAqG,CAAC,CAAC;YAClH,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3H,CAAC;QAED,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YACpG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;gBACnB,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC3C,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC7C,CAAC,iBAAiB,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC5C,CAAC,iBAAiB,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC5C,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAChC,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aACjC,CAAC,CAAC,CAAC;YAEJ,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;gBACrC,mDAAmD;gBACnD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;gBACzC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBACjC,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;wBACpB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;wBAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;gBACD,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;qBAC/B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC3B,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;oBACvB,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE;oBAC5B,KAAK;iBACN,CAAC,CAAC;gBACL,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QAED,0EAA0E;QAC1E,gDAAgD;QAChD,MAAM,UAAU,GAA4B,EAAE,CAAC;QAC/C,IAAI,IAAI,EAAE,KAAK;YAAE,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAC/C,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1D,6DAA6D;YAC7D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;YACzC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjC,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;oBACpB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;YACD,UAAU,CAAC,iBAAiB,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;iBACjD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3B,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,UAAU,CAAC,QAAQ,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QACpE,UAAU,CAAC,QAAQ,GAAG,iBAAiB,CAAC;QACxC,IAAI,iBAAiB,KAAK,iBAAiB,EAAE,CAAC;YAC5C,UAAU,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;YACjD,UAAU,CAAC,eAAe,GAAG;gBAC3B,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,uBAAuB;gBAC/B,UAAU,EAAE,uBAAuB;aACpC,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG;YACd,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/G,MAAM,CAAC,gBAAgB,EAAE,4BAA4B,EAAE,OAAO,CAAC;YAC/D,MAAM,CAAC,uBAAuB,EAAE,gCAAgC,EAAE,OAAO,CAAC;SAC3E,CAAC;QACF,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -66,6 +66,7 @@ export function registerTopBuyersTool(server, sfr) {
66
66
  b.hasProfilePage ? "Yes" : "No",
67
67
  ]);
68
68
  lines.push(markdownTable(["#", "Buyer", "Acquisitions", "Contact Info", "Profile"], rows));
69
+ lines.push("", "_Note: 'Profile=Yes' is an upstream signal and may still return not_found for some buyers._");
69
70
  }
70
71
  else {
71
72
  lines.push("_No buyers found for this location._ " +
@@ -1 +1 @@
1
- {"version":3,"file":"topBuyers.js","sourceRoot":"","sources":["../../../src/tools/sfr/topBuyers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"topBuyers.js","sourceRoot":"","sources":["../../../src/tools/sfr/topBuyers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { AppConfig } from "../config.js";
3
+ export declare function registerWelcomeTool(server: McpServer, config: AppConfig): void;
@@ -0,0 +1,58 @@
1
+ import { z } from "zod";
2
+ import { structuredResult } from "./formatters.js";
3
+ import { registerToolSafe } from "./registerToolSafe.js";
4
+ export function registerWelcomeTool(server, config) {
5
+ const hasSfr = config.sfr !== null;
6
+ const hasPlr = config.plr !== null;
7
+ registerToolSafe(server, "sfra_welcome", {
8
+ title: "SFR Analytics: Welcome & Setup Check",
9
+ description: "Shows which APIs are connected (SFR, PLR, or both) and recommends the best next steps. " +
10
+ "Call this first to confirm your setup is working.",
11
+ inputSchema: z.object({}),
12
+ }, async () => {
13
+ const lines = ["## Welcome to SFR Analytics MCP", ""];
14
+ const tokenMode = !hasSfr && !hasPlr ? "none" : hasSfr && hasPlr ? "both" : hasSfr ? "sfr" : "plr";
15
+ // Auth status
16
+ lines.push(`**Connected APIs:** ${tokenMode === "both" ? "SFR + PLR (full access)"
17
+ : tokenMode === "sfr" ? "SFR only (21 property & market tools)"
18
+ : tokenMode === "plr" ? "PLR only (17 lending & borrower tools)"
19
+ : "None configured"}`, "");
20
+ // Recommended next steps based on auth
21
+ const actions = [];
22
+ if (tokenMode === "none") {
23
+ lines.push("No API tokens detected. Add at least one token to your MCP configuration:", " - `SFR-Api-Token` header (or `SFR_API_TOKEN` env var) for property data", " - `PLR-Api-Token` header (or `PLR_API_TOKEN` env var) for lending data", "", "Get API keys at https://www.sfranalytics.com");
24
+ }
25
+ else {
26
+ lines.push("### Recommended Next Steps", "");
27
+ if (hasSfr) {
28
+ actions.push({ title: "Screen markets by yield", type: "prompt", id: "market-screen", why: "Find the best zip codes for SFR investment" }, { title: "Analyze a property", type: "prompt", id: "property-analysis", why: "Underwrite a specific address with rent comps and cap rate" });
29
+ }
30
+ if (hasPlr) {
31
+ actions.push({ title: "Lending market overview", type: "prompt", id: "lending-overview", why: "See private lending volumes, top lenders, and market trends" }, { title: "Find borrowers", type: "prompt", id: "borrower-outreach", why: "Search and contact active private lending borrowers" });
32
+ }
33
+ if (hasSfr && hasPlr) {
34
+ actions.push({ title: "Research a buyer", type: "prompt", id: "buyer-research", why: "Deep-dive an investor's portfolio, strategy, and lending activity" });
35
+ }
36
+ for (const a of actions) {
37
+ lines.push(`${actions.indexOf(a) + 1}. **${a.title}** — ${a.why}`, ` Use prompt: \`${a.id}\``);
38
+ }
39
+ // Upsell missing API
40
+ if (!hasPlr) {
41
+ lines.push("", "Add a PLR API token to unlock 17 lending and borrower intelligence tools.", " Learn more: https://www.sfranalytics.com/products/private-lender");
42
+ }
43
+ if (!hasSfr) {
44
+ lines.push("", "Add an SFR API token to unlock 21 property, buyer, and market tools.", " Learn more: https://www.sfranalytics.com/products/api");
45
+ }
46
+ }
47
+ lines.push("", "Run `sfra_health` to check API connectivity and latency.");
48
+ const structured = {
49
+ tokenMode,
50
+ sfrEnabled: hasSfr,
51
+ plrEnabled: hasPlr,
52
+ toolCount: (hasSfr ? 21 : 0) + (hasPlr ? 17 : 0) + 1,
53
+ recommendedActions: actions,
54
+ };
55
+ return structuredResult(lines.join("\n"), structured);
56
+ });
57
+ }
58
+ //# sourceMappingURL=welcome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/tools/welcome.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sfranalytics/mcp",
3
- "version": "0.6.2",
4
- "description": "MCP server for SFR Analytics — single-family rental property data, buyer intelligence, and private lending insights",
3
+ "version": "0.6.3",
4
+ "description": "MCP server for SFR Analytics — single-family residential property data, buyer intelligence, and private lending insights",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE",
7
7
  "author": "SFR Analytics <support@sfranalytics.com> (https://www.sfranalytics.com)",