@sfranalytics/mcp 0.6.2 → 0.6.4

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 (68) 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 +260 -41
  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 +904 -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 +33 -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/plr/loansNearby.js +100 -84
  33. package/dist/tools/plr/loansNearby.js.map +1 -1
  34. package/dist/tools/plr/transactionHistory.js +67 -50
  35. package/dist/tools/plr/transactionHistory.js.map +1 -1
  36. package/dist/tools/registerToolSafe.d.ts +5 -1
  37. package/dist/tools/registerToolSafe.js +110 -4
  38. package/dist/tools/registerToolSafe.js.map +1 -1
  39. package/dist/tools/sfr/bestBuyers.js +58 -41
  40. package/dist/tools/sfr/bestBuyers.js.map +1 -1
  41. package/dist/tools/sfr/buyerProfile.js +6 -3
  42. package/dist/tools/sfr/buyerProfile.js.map +1 -1
  43. package/dist/tools/sfr/getProperty.js +147 -124
  44. package/dist/tools/sfr/getProperty.js.map +1 -1
  45. package/dist/tools/sfr/propertyBatch.js +3 -1
  46. package/dist/tools/sfr/propertyBatch.js.map +1 -1
  47. package/dist/tools/sfr/propertyComps.js +51 -34
  48. package/dist/tools/sfr/propertyComps.js.map +1 -1
  49. package/dist/tools/sfr/propertyTransactions.js +48 -31
  50. package/dist/tools/sfr/propertyTransactions.js.map +1 -1
  51. package/dist/tools/sfr/rentalComparables.js +83 -66
  52. package/dist/tools/sfr/rentalComparables.js.map +1 -1
  53. package/dist/tools/sfr/rentalMarketAnalysis.js +5 -2
  54. package/dist/tools/sfr/rentalMarketAnalysis.js.map +1 -1
  55. package/dist/tools/sfr/rentalStats.js +19 -3
  56. package/dist/tools/sfr/rentalStats.js.map +1 -1
  57. package/dist/tools/sfr/searchProperties.js +3 -1
  58. package/dist/tools/sfr/searchProperties.js.map +1 -1
  59. package/dist/tools/sfr/topBuyers.js +4 -0
  60. package/dist/tools/sfr/topBuyers.js.map +1 -1
  61. package/dist/tools/sfr/zipDetail.js +83 -72
  62. package/dist/tools/sfr/zipDetail.js.map +1 -1
  63. package/dist/tools/sfr/zipFinder.js +24 -15
  64. package/dist/tools/sfr/zipFinder.js.map +1 -1
  65. package/dist/tools/welcome.d.ts +3 -0
  66. package/dist/tools/welcome.js +58 -0
  67. package/dist/tools/welcome.js.map +1 -0
  68. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"zipDetail.js","sourceRoot":"","sources":["../../../src/tools/sfr/zipDetail.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zipDetail.js","sourceRoot":"","sources":["../../../src/tools/sfr/zipDetail.ts"],"names":[],"mappings":"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"}
@@ -22,18 +22,6 @@ export function registerZipFinderTool(server, sfr) {
22
22
  "For detailed stats on a single zip, use sfr_zip_detail.",
23
23
  inputSchema: Input,
24
24
  }, async (args) => {
25
- const query = {
26
- search_type: args.search_type,
27
- page: args.page,
28
- page_size: args.page_size,
29
- };
30
- if (args.zips)
31
- query.zips = args.zips;
32
- if (args.sort)
33
- query.sort = args.sort;
34
- const data = await sfr.getZipFinder(query);
35
- const rawItems = data?.data ?? data?.results ?? (Array.isArray(data) ? data : []);
36
- const total = data?.total ?? data?.count ?? rawItems.length;
37
25
  const normalizedSort = (args.sort ?? "").toLowerCase();
38
26
  const isGrossYieldSort = normalizedSort.includes("gross_yield") || normalizedSort.includes("grossyield");
39
27
  // Workaround for upstream API bug: grossYield can be corrupt (>1.0) when rent is null.
@@ -46,6 +34,20 @@ export function registerZipFinderTool(server, sfr) {
46
34
  return null;
47
35
  return n;
48
36
  };
37
+ // When sorting by yield, over-fetch to compensate for corrupt data being filtered out.
38
+ // The top results from the API often have invalid yields (>40% from null rents).
39
+ const fetchPageSize = isGrossYieldSort ? Math.min(args.page_size * 4, 100) : args.page_size;
40
+ const query = {
41
+ search_type: args.search_type,
42
+ page: args.page,
43
+ page_size: fetchPageSize,
44
+ };
45
+ if (args.zips)
46
+ query.zips = args.zips;
47
+ if (args.sort)
48
+ query.sort = args.sort;
49
+ const data = await sfr.getZipFinder(query);
50
+ const rawItems = data?.data ?? data?.results ?? (Array.isArray(data) ? data : []);
49
51
  const sanitizedItems = rawItems.map((item) => {
50
52
  const normalizedGrossYield = normalizeGrossYield(item.grossYield ?? item.gross_yield);
51
53
  return {
@@ -54,12 +56,16 @@ export function registerZipFinderTool(server, sfr) {
54
56
  gross_yield: normalizedGrossYield,
55
57
  };
56
58
  });
57
- const items = isGrossYieldSort
59
+ const allValid = isGrossYieldSort
58
60
  ? sanitizedItems.filter((item) => item.grossYield != null || item.gross_yield != null)
59
61
  : sanitizedItems;
62
+ // Trim back to the requested page_size after filtering
63
+ const items = allValid.slice(0, args.page_size);
64
+ const filteredOut = sanitizedItems.length - allValid.length;
60
65
  const lines = [
61
66
  `## Zip Code Finder`,
62
- `**Total:** ${total} zips | **Page:** ${args.page}`,
67
+ `**Total:** ${items.length} zips | **Page:** ${args.page}`,
68
+ ...(filteredOut > 0 ? [`*${filteredOut} zips excluded due to missing or invalid yield data*`] : []),
63
69
  "",
64
70
  ];
65
71
  if (items.length > 0) {
@@ -81,6 +87,9 @@ export function registerZipFinderTool(server, sfr) {
81
87
  ]);
82
88
  lines.push(markdownTable(["Zip", "Pop", "Income", "Home Value", "Rent", "Yield", "Inst Own"], rows));
83
89
  }
90
+ else if (filteredOut > 0) {
91
+ lines.push("All results had invalid yield data and were excluded. Try removing the sort or sorting by a different field (e.g. `-median_home_value`).");
92
+ }
84
93
  else {
85
94
  lines.push("```json");
86
95
  lines.push(truncatedJson(data, 3000));
@@ -92,7 +101,7 @@ export function registerZipFinderTool(server, sfr) {
92
101
  ...(topZip ? [action("sfr_rental_stats", "Rental market for top zip", { search_type: "zip", zips: String(topZip) })] : []),
93
102
  ...(topZip ? [action("sfr_top_buyers", "Active buyers in top zip", { search_type: "zip", zips: String(topZip) })] : []),
94
103
  ];
95
- return structuredResult(lines.join("\n"), { items, total, page: args.page }, actions);
104
+ return structuredResult(lines.join("\n"), { items, total: items.length, page: args.page }, actions);
96
105
  });
97
106
  }
98
107
  //# sourceMappingURL=zipFinder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zipFinder.js","sourceRoot":"","sources":["../../../src/tools/sfr/zipFinder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zipFinder.js","sourceRoot":"","sources":["../../../src/tools/sfr/zipFinder.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.4",
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)",