@fundzwatch/mcp-server 1.0.1 → 1.2.1
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/LICENSE +21 -0
- package/README.md +77 -49
- package/dist/index.js +209 -2
- package/dist/index.js.map +1 -0
- package/glama.json +6 -0
- package/manifest.json +313 -0
- package/package.json +18 -4
- package/server.json +30 -0
- package/smithery.yaml +23 -0
- package/src/index.ts +0 -342
- package/tsconfig.json +0 -19
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Fundz Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,18 +1,28 @@
|
|
|
1
1
|
# FundzWatch MCP Server
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/@fundzwatch/mcp-server)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://www.npmjs.com/package/@fundzwatch/mcp-server)
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
### Listed on
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
[](https://www.npmjs.com/package/@fundzwatch/mcp-server)
|
|
10
|
+
[](https://smithery.ai/servers/fundzwatch/fundzwatch-mcp)
|
|
11
|
+
[](https://cline.bot)
|
|
12
|
+
[](https://github.com/punkpeye/awesome-mcp-servers)
|
|
13
|
+
[](https://glama.ai/mcp/servers/Fund-z/fundzwatch-mcp)
|
|
14
|
+
|
|
15
|
+
The free AI-agent gateway to **[FundzWatch](https://fundzwatch.ai)** answer sections — real-time business-event intelligence via the [Model Context Protocol](https://modelcontextprotocol.io).
|
|
8
16
|
|
|
9
|
-
|
|
17
|
+
Give Claude, Cursor, Windsurf, Cline, or any MCP client live access to verified funding rounds, executive moves, UCC refinancing windows, Form 5500 benefit-plan signals, and AI-scored leads matched to your ICP.
|
|
10
18
|
|
|
11
|
-
|
|
19
|
+
**7 of the 14 tools work with no API key** — point your agent at the server and it returns live, daily-rescored "answer section" data on the first run. Add a free key to unlock AI-scored leads, watchlists, and the full event feeds.
|
|
12
20
|
|
|
13
|
-
|
|
21
|
+
## Quick Start
|
|
14
22
|
|
|
15
|
-
|
|
23
|
+
### Option A — `npx` (Claude Desktop, Cursor, Windsurf, Cline)
|
|
24
|
+
|
|
25
|
+
No install needed. Add this to your client's MCP config:
|
|
16
26
|
|
|
17
27
|
```json
|
|
18
28
|
{
|
|
@@ -28,61 +38,79 @@ Edit your Claude Desktop config (`~/Library/Application Support/Claude/claude_de
|
|
|
28
38
|
}
|
|
29
39
|
```
|
|
30
40
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
- "Get my AI-scored leads with a score above 70"
|
|
36
|
-
- "What's happening in the market today?"
|
|
37
|
-
- "Track stripe.com and github.com on my watchlist"
|
|
41
|
+
Config file locations for Claude Desktop:
|
|
42
|
+
- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
43
|
+
- **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
|
|
44
|
+
- **Linux:** `~/.config/Claude/claude_desktop_config.json`
|
|
38
45
|
|
|
39
|
-
|
|
46
|
+
> The `env` block is **optional**. Omit it entirely and the 7 key-less tools still return live data. Get a free key (no credit card) at **[fundzwatch.ai/onboarding](https://fundzwatch.ai/onboarding)** to add AI-scored leads, watchlists, and full event feeds.
|
|
40
47
|
|
|
41
|
-
|
|
42
|
-
|------|-------------|
|
|
43
|
-
| `get_scored_leads` | AI-scored leads matched to your ICP with buyer intent, buying stage, and outreach recommendations |
|
|
44
|
-
| `get_events` | Real-time business events: funding, acquisitions, hiring, contracts, product launches |
|
|
45
|
-
| `get_market_pulse` | Market activity overview with totals, trends, and largest rounds |
|
|
46
|
-
| `get_market_brief` | AI-generated strategic intelligence brief |
|
|
47
|
-
| `manage_watchlist` | Add, remove, or list tracked companies |
|
|
48
|
-
| `get_watchlist_events` | Events for your tracked companies |
|
|
49
|
-
| `get_usage` | Check API usage and limits |
|
|
48
|
+
For Cursor / Windsurf / Cline, use the same block under their MCP settings (the inner `"fundzwatch": { ... }` object).
|
|
50
49
|
|
|
51
|
-
|
|
50
|
+
### Option B — Smithery (hosted, one-click)
|
|
52
51
|
|
|
53
|
-
|
|
52
|
+
FundzWatch is live on Smithery: **[smithery.ai/servers/fundzwatch/fundzwatch-mcp](https://smithery.ai/servers/fundzwatch/fundzwatch-mcp)**
|
|
54
53
|
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
"fundzwatch": {
|
|
58
|
-
"command": "npx",
|
|
59
|
-
"args": ["-y", "@fundzwatch/mcp-server"],
|
|
60
|
-
"env": {
|
|
61
|
-
"FUNDZWATCH_API_KEY": "fundz_test_your_key_here"
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
54
|
+
```bash
|
|
55
|
+
npx -y @smithery/cli install @fundzwatch/mcp-server --client claude
|
|
65
56
|
```
|
|
66
57
|
|
|
67
|
-
|
|
58
|
+
### Then just ask
|
|
68
59
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
60
|
+
- "Which companies raised in the last year **and** are hiring right now?" *(no key)*
|
|
61
|
+
- "Show me UCC liens lapsing in the next 12 months in California." *(no key)*
|
|
62
|
+
- "Find recently funded companies with a Form 5500 plan and a named carrier." *(no key)*
|
|
63
|
+
- "Get my AI-scored leads with buyer-intent above 70." *(key)*
|
|
64
|
+
- "Track stripe.com and github.com and alert me on new events." *(key)*
|
|
65
|
+
|
|
66
|
+
## Tools (14)
|
|
67
|
+
|
|
68
|
+
### Key-less — no API key required
|
|
69
|
+
|
|
70
|
+
Live teasers off the Fundz answer sections (top results + cohort size, re-scored daily). California + Colorado UCC coverage.
|
|
71
|
+
|
|
72
|
+
| Tool | What it answers |
|
|
73
|
+
|------|-----------------|
|
|
74
|
+
| `get_funded_and_hiring` | Companies funded in the last 12 months **and** actively hiring — the strongest buying window, scored daily. |
|
|
75
|
+
| `get_refinancing_windows` | Companies whose UCC-1 liens lapse within 12 months (Renewal Radar) — dated refinancing windows. |
|
|
76
|
+
| `get_stacked_borrowers` | Companies with active secured debt from 2+ distinct lenders — second-position / consolidation targets. |
|
|
77
|
+
| `get_benefit_plans_in_play` | Recently funded companies with a DOL Form 5500 plan: renewal timing, headcount-vs-plan gap, incumbent carrier. |
|
|
78
|
+
| `get_money_in_motion` | Companies with a recent exec move **and** recent funding — the wealth-advisor "money in motion" moment. |
|
|
79
|
+
| `get_lender_directory` | Directory of 8,600+ UCC secured parties ranked by filing volume, with lapsing-soon exposure. |
|
|
80
|
+
| `get_broker_directory` | Directory of 65,000+ benefits brokers (Form 5500 Schedule A), ranked by filings carried, with commission volume. |
|
|
81
|
+
|
|
82
|
+
### Keyed — require `FUNDZWATCH_API_KEY`
|
|
83
|
+
|
|
84
|
+
| Tool | What it answers |
|
|
85
|
+
|------|-----------------|
|
|
86
|
+
| `get_scored_leads` | AI-scored sales leads matched to your ICP, with buyer intent, buying stage, and recommended outreach. |
|
|
87
|
+
| `get_events` | Real-time business events: funding, acquisitions, exec hires, government contracts, product launches. |
|
|
88
|
+
| `get_market_pulse` | Market activity overview: funding totals, acquisitions, exec moves, contracts, launches (7d / 30d). |
|
|
89
|
+
| `get_market_brief` | Today's AI-generated strategic intelligence brief on the most important market movements. |
|
|
90
|
+
| `manage_watchlist` | Add, remove, or list tracked companies; tracked companies generate new-event alerts. |
|
|
91
|
+
| `get_watchlist_events` | Recent events for the companies on your watchlist. |
|
|
92
|
+
| `get_usage` | Check your API usage, limits, and current tier. |
|
|
75
93
|
|
|
76
94
|
## What is FundzWatch?
|
|
77
95
|
|
|
78
|
-
[FundzWatch.ai](https://fundzwatch.ai)
|
|
96
|
+
[FundzWatch.ai](https://fundzwatch.ai) is the AI-agent front door to Fundz's verified business-event intelligence — funding rounds, acquisitions, executive moves, government contracts, hiring signals, UCC liens, and DOL Form 5500 benefit-plan filings, fused into cross-dataset "answer sections" that no single-source lookup reproduces. Everything is re-scored daily.
|
|
97
|
+
|
|
98
|
+
- **Key-less answer sections** — point an agent at the server and get live data on day one, no signup.
|
|
99
|
+
- **AI-scored leads** — companies scored against your ICP with buyer-intent and outreach guidance (free key).
|
|
100
|
+
- **Cross-dataset cohorts** — funded-and-hiring, money-in-motion, refinancing windows, benefit-plans-in-play.
|
|
101
|
+
- **Who-finances-whom** — lender (8,600+) and broker (65,000+) directories from UCC and Form 5500.
|
|
102
|
+
|
|
103
|
+
Free API key (no credit card): **[fundzwatch.ai/onboarding](https://fundzwatch.ai/onboarding)**.
|
|
104
|
+
|
|
105
|
+
The full scored feeds, ICP filters, contact data, and daily alerts live in the Fundz app — **[app.fundz.net](https://app.fundz.net)**, Strategic plan ($149/mo).
|
|
106
|
+
|
|
107
|
+
Built by [Fundz](https://fundz.net) — millions of business events analyzed since 2017.
|
|
79
108
|
|
|
80
|
-
|
|
81
|
-
- **Event Feeds**: Real-time funding rounds, acquisitions, executive moves, government contracts, and product launches
|
|
82
|
-
- **Predictive Intelligence**: ML models predicting which companies are likely to make moves (82% accuracy)
|
|
83
|
-
- **Market Briefs**: AI-generated daily strategic intelligence briefings
|
|
109
|
+
## Tutorials
|
|
84
110
|
|
|
85
|
-
|
|
111
|
+
- [Build an AI SDR Agent with CrewAI + FundzWatch](https://github.com/Fund-z/fundzwatch-python/blob/main/tutorials/build-ai-sdr-crewai.md)
|
|
112
|
+
- [Real-Time Funding Alerts with LangChain + FundzWatch](https://github.com/Fund-z/fundzwatch-python/blob/main/tutorials/langchain-funding-alerts.md)
|
|
113
|
+
- [Turn Claude into Your Business Intelligence Analyst with MCP](https://github.com/Fund-z/fundzwatch-python/blob/main/tutorials/mcp-claude-business-intelligence.md)
|
|
86
114
|
|
|
87
115
|
## License
|
|
88
116
|
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,11 @@ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
|
|
|
5
5
|
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
6
6
|
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
7
7
|
const API_BASE = "https://api.fundz.net/v1/watch";
|
|
8
|
+
// Answer-section feeds (Renewal Radar, Stacked Borrowers, Benefit Plans,
|
|
9
|
+
// Funded & Hiring, Lender Directory) are public teaser endpoints — no key
|
|
10
|
+
// needed. Anonymous callers get the top 5 of each scored cohort plus the
|
|
11
|
+
// full cohort size; the complete feeds live in the Fundz app (Strategic).
|
|
12
|
+
const PUBLIC_API_BASE = "https://api.fundz.net/v1";
|
|
8
13
|
function getApiKey() {
|
|
9
14
|
const key = process.env.FUNDZWATCH_API_KEY;
|
|
10
15
|
if (!key) {
|
|
@@ -21,7 +26,7 @@ async function apiRequest(method, path, params) {
|
|
|
21
26
|
headers: {
|
|
22
27
|
Authorization: `Bearer ${apiKey}`,
|
|
23
28
|
"Content-Type": "application/json",
|
|
24
|
-
"User-Agent": "fundzwatch-mcp/1.
|
|
29
|
+
"User-Agent": "fundzwatch-mcp/1.1.0",
|
|
25
30
|
},
|
|
26
31
|
};
|
|
27
32
|
if (method === "GET" && params) {
|
|
@@ -41,11 +46,44 @@ async function apiRequest(method, path, params) {
|
|
|
41
46
|
}
|
|
42
47
|
return response.json();
|
|
43
48
|
}
|
|
49
|
+
// Public (key-less) GET against the answer-section teaser endpoints.
|
|
50
|
+
async function publicRequest(path, params) {
|
|
51
|
+
const url = new URL(`${PUBLIC_API_BASE}${path}`);
|
|
52
|
+
if (params) {
|
|
53
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
54
|
+
if (value !== undefined && value !== null)
|
|
55
|
+
url.searchParams.append(key, String(value));
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
const response = await fetch(url.toString(), {
|
|
59
|
+
headers: { "User-Agent": "fundzwatch-mcp/1.1.0" },
|
|
60
|
+
});
|
|
61
|
+
if (!response.ok) {
|
|
62
|
+
throw new Error(`API error ${response.status}: ${response.statusText}`);
|
|
63
|
+
}
|
|
64
|
+
return response.json();
|
|
65
|
+
}
|
|
44
66
|
function textResult(text) {
|
|
45
67
|
return { content: [{ type: "text", text }] };
|
|
46
68
|
}
|
|
69
|
+
// Shared formatter for the section feeds: rows differ per section, so print
|
|
70
|
+
// whatever evidence fields are present, then the cohort size + upgrade path.
|
|
71
|
+
function formatSectionFeed(label, rows, summary, limited, appUrl, lineFor) {
|
|
72
|
+
if (!rows.length)
|
|
73
|
+
return `No companies in ${label} right now. The cohort refreshes daily.`;
|
|
74
|
+
const lines = rows.map((r, i) => {
|
|
75
|
+
const org = r.organization || {};
|
|
76
|
+
const loc = [org.city, org.state].filter(Boolean).join(", ");
|
|
77
|
+
return `${i + 1}. **${org.name}**${loc ? ` (${loc})` : ""} — Score ${Math.round(r.score)}${r.is_new ? " · NEW this week" : ""}\n ${lineFor(r)}`;
|
|
78
|
+
});
|
|
79
|
+
let text = `${label} — ${summary.total} companies, ${summary.new_this_week} new this week (refreshed ${summary.last_refreshed_on}):\n\n${lines.join("\n")}`;
|
|
80
|
+
if (limited) {
|
|
81
|
+
text += `\n\nThis is the free preview (top ${rows.length} of ${summary.total}). The full scored feed with filters, contacts, and daily alerts is in the Fundz app (Strategic plan): ${appUrl}`;
|
|
82
|
+
}
|
|
83
|
+
return text;
|
|
84
|
+
}
|
|
47
85
|
// ─── Server Setup ───────────────────────────────────────────────────────
|
|
48
|
-
const server = new index_js_1.Server({ name: "fundzwatch", version: "1.
|
|
86
|
+
const server = new index_js_1.Server({ name: "fundzwatch", version: "1.2.1" }, { capabilities: { tools: {} } });
|
|
49
87
|
// ─── List Tools ─────────────────────────────────────────────────────────
|
|
50
88
|
server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({
|
|
51
89
|
tools: [
|
|
@@ -137,6 +175,103 @@ server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({
|
|
|
137
175
|
description: "Check your FundzWatch API usage: calls made, limits, current tier.",
|
|
138
176
|
inputSchema: { type: "object", properties: {} },
|
|
139
177
|
},
|
|
178
|
+
{
|
|
179
|
+
name: "get_funded_and_hiring",
|
|
180
|
+
description: "Companies with a verified funding round in the last 12 months AND live hiring " +
|
|
181
|
+
"evidence (open ATS roles, executive hires, hiring signals) — the strongest buying " +
|
|
182
|
+
"window, score-ranked and refreshed daily. No API key required.",
|
|
183
|
+
inputSchema: {
|
|
184
|
+
type: "object",
|
|
185
|
+
properties: {
|
|
186
|
+
q: { type: "string", description: "Company name search" },
|
|
187
|
+
state: { type: "string", description: "2-letter US state filter (e.g. 'CA')" },
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
name: "get_refinancing_windows",
|
|
193
|
+
description: "Companies whose active UCC-1 liens lapse within 12 months (Renewal Radar). " +
|
|
194
|
+
"UCC liens expire after 5 years — the incumbent lender must re-file or lose priority, " +
|
|
195
|
+
"so each approaching lapse is a refinancing window with a date on it. For lenders, " +
|
|
196
|
+
"MCA/ISO, and equipment finance. California + Colorado coverage (CO refreshed daily). No API key required.",
|
|
197
|
+
inputSchema: {
|
|
198
|
+
type: "object",
|
|
199
|
+
properties: {
|
|
200
|
+
q: { type: "string", description: "Company name search" },
|
|
201
|
+
state: { type: "string", description: "2-letter US state filter" },
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
name: "get_stacked_borrowers",
|
|
207
|
+
description: "Companies with active secured debt (UCC-1) from 2+ distinct lenders and a filing in " +
|
|
208
|
+
"the last 24 months — proven appetite for layered financing; second-position and " +
|
|
209
|
+
"refi/consolidation targets. California + Colorado coverage (CO refreshed daily). No API key required.",
|
|
210
|
+
inputSchema: {
|
|
211
|
+
type: "object",
|
|
212
|
+
properties: {
|
|
213
|
+
q: { type: "string", description: "Company name search" },
|
|
214
|
+
state: { type: "string", description: "2-letter US state filter" },
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
name: "get_benefit_plans_in_play",
|
|
220
|
+
description: "Recently funded companies (≤24 months) with a DOL Form 5500 benefit-plan filing on " +
|
|
221
|
+
"record: plan renewal timing, participant count vs current headcount ('outgrowing " +
|
|
222
|
+
"their plan'), and the incumbent insurance carrier from Schedule A. For benefits " +
|
|
223
|
+
"brokers, retirement-plan advisors, PEOs, HR-tech sellers. No API key required.",
|
|
224
|
+
inputSchema: {
|
|
225
|
+
type: "object",
|
|
226
|
+
properties: {
|
|
227
|
+
q: { type: "string", description: "Company name search" },
|
|
228
|
+
state: { type: "string", description: "2-letter US state filter" },
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
name: "get_lender_directory",
|
|
234
|
+
description: "Who finances whom: directory of 8,600+ UCC secured parties (lenders) ranked by " +
|
|
235
|
+
"filing volume, with active-lien counts and lapsing-soon exposure per lender. " +
|
|
236
|
+
"California + Colorado coverage (CO refreshed daily). No API key required.",
|
|
237
|
+
inputSchema: {
|
|
238
|
+
type: "object",
|
|
239
|
+
properties: {
|
|
240
|
+
q: { type: "string", description: "Lender name search (e.g. 'Wells Fargo')" },
|
|
241
|
+
page: { type: "number", description: "Page (50/page). Default: 1" },
|
|
242
|
+
},
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
name: "get_money_in_motion",
|
|
247
|
+
description: "Companies with an executive-move announcement in the last 180 days AND a verified " +
|
|
248
|
+
"funding round in the last 24 months — the wealth advisor's 'money in motion' moment: " +
|
|
249
|
+
"a new comp package (often equity), an old 401(k) to roll over, benefits about to be " +
|
|
250
|
+
"re-evaluated. Score-ranked, refreshed daily. For RIAs, wealth managers, retirement-plan " +
|
|
251
|
+
"advisors, executive-benefits sellers. No API key required.",
|
|
252
|
+
inputSchema: {
|
|
253
|
+
type: "object",
|
|
254
|
+
properties: {
|
|
255
|
+
q: { type: "string", description: "Company name search" },
|
|
256
|
+
state: { type: "string", description: "2-letter US state filter (e.g. 'CA')" },
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
name: "get_broker_directory",
|
|
262
|
+
description: "Who broker-of-records whom: directory of 65,000+ benefits brokers from DOL Form 5500 " +
|
|
263
|
+
"Schedule A Part 1, ranked by filings carried, with sponsor counts and commission " +
|
|
264
|
+
"volume per broker. For carriers, broker M&A, benefits-tech sellers, and brokers " +
|
|
265
|
+
"scouting competitors. No API key required.",
|
|
266
|
+
inputSchema: {
|
|
267
|
+
type: "object",
|
|
268
|
+
properties: {
|
|
269
|
+
q: { type: "string", description: "Broker name search (e.g. 'Lockton')" },
|
|
270
|
+
state: { type: "string", description: "2-letter US state filter" },
|
|
271
|
+
page: { type: "number", description: "Page (50/page). Default: 1" },
|
|
272
|
+
},
|
|
273
|
+
},
|
|
274
|
+
},
|
|
140
275
|
],
|
|
141
276
|
}));
|
|
142
277
|
// ─── Handle Tool Calls ──────────────────────────────────────────────────
|
|
@@ -272,6 +407,78 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
|
272
407
|
(data.last_api_call ? `Last API Call: ${data.last_api_call}` : "");
|
|
273
408
|
return textResult(text);
|
|
274
409
|
}
|
|
410
|
+
case "get_funded_and_hiring": {
|
|
411
|
+
const data = await publicRequest("/funded_hiring", { q: args.q, state: args.state });
|
|
412
|
+
return textResult(formatSectionFeed("Funded & Hiring Now", data.funded_hiring || [], data.summary, !!data.meta?.free_tier_limited, "https://app.fundz.net/funded-and-hiring", (r) => {
|
|
413
|
+
const f = r.latest_funding || {};
|
|
414
|
+
const bits = [
|
|
415
|
+
f.series ? `${f.series} (${f.event_date})` : `Funded ${f.event_date || ""}`,
|
|
416
|
+
r.open_postings_90d ? `${r.open_postings_90d} open roles` : null,
|
|
417
|
+
r.exec_hires_90d ? `${r.exec_hires_90d} exec hires` : null,
|
|
418
|
+
].filter(Boolean);
|
|
419
|
+
return bits.join(" · ");
|
|
420
|
+
}));
|
|
421
|
+
}
|
|
422
|
+
case "get_refinancing_windows": {
|
|
423
|
+
const data = await publicRequest("/renewal_radar", { q: args.q, state: args.state });
|
|
424
|
+
return textResult(formatSectionFeed("Renewal Radar (UCC refinancing windows)", data.renewal_radar || [], data.summary, !!data.meta?.free_tier_limited, "https://app.fundz.net/lender-intelligence", (r) => [
|
|
425
|
+
r.soonest_lapse_date ? `Lien lapses ${r.soonest_lapse_date}` : null,
|
|
426
|
+
r.top_lender ? `incumbent: ${r.top_lender}` : null,
|
|
427
|
+
r.active_liens ? `${r.active_liens} active liens` : null,
|
|
428
|
+
r.lender_count > 1 ? `${r.lender_count} lenders` : null,
|
|
429
|
+
].filter(Boolean).join(" · ")));
|
|
430
|
+
}
|
|
431
|
+
case "get_stacked_borrowers": {
|
|
432
|
+
const data = await publicRequest("/stacked_borrowers", { q: args.q, state: args.state });
|
|
433
|
+
return textResult(formatSectionFeed("Stacked Borrowers", data.stacked_borrowers || [], data.summary, !!data.meta?.free_tier_limited, "https://app.fundz.net/lender-intelligence", (r) => [
|
|
434
|
+
r.lender_count ? `${r.lender_count} distinct lenders` : null,
|
|
435
|
+
r.active_liens ? `${r.active_liens} active liens` : null,
|
|
436
|
+
r.latest_lender ? `latest: ${r.latest_lender} (${r.latest_filing_date})` : null,
|
|
437
|
+
r.soonest_lapse_date ? `soonest lapse ${r.soonest_lapse_date}` : null,
|
|
438
|
+
].filter(Boolean).join(" · ")));
|
|
439
|
+
}
|
|
440
|
+
case "get_benefit_plans_in_play": {
|
|
441
|
+
const data = await publicRequest("/benefit_plans", { q: args.q, state: args.state });
|
|
442
|
+
return textResult(formatSectionFeed("Benefit Plans in Play", data.benefit_plans || [], data.summary, !!data.meta?.free_tier_limited, "https://app.fundz.net/benefits-intelligence", (r) => [
|
|
443
|
+
r.next_renewal_on ? `plan renewal ${r.next_renewal_on}` : null,
|
|
444
|
+
r.top_carrier ? `incumbent: ${r.top_carrier}` : null,
|
|
445
|
+
r.participant_count ? `${r.participant_count} plan participants` : null,
|
|
446
|
+
r.employees ? `~${r.employees} employees now` : null,
|
|
447
|
+
r.latest_funding?.event_date ? `funded ${r.latest_funding.event_date}` : null,
|
|
448
|
+
].filter(Boolean).join(" · ")));
|
|
449
|
+
}
|
|
450
|
+
case "get_lender_directory": {
|
|
451
|
+
const data = await publicRequest("/lenders", { q: args.q, page: args.page });
|
|
452
|
+
const lenders = data.lenders || [];
|
|
453
|
+
if (!lenders.length)
|
|
454
|
+
return textResult("No lenders match that search.");
|
|
455
|
+
const lines = lenders.slice(0, 25).map((l, i) => `${i + 1}. **${l.name}** — ${l.filings} filings (${l.active_filings} active, ${l.lapsing_12mo} lapsing ≤12mo)` +
|
|
456
|
+
(l.latest_filing_date ? ` · latest ${l.latest_filing_date}` : ""));
|
|
457
|
+
return textResult(`Lender Directory — ${data.meta.total_count} secured parties (${data.meta.coverage}):\n\n${lines.join("\n")}\n\n` +
|
|
458
|
+
`Borrower lists per lender live in the Fundz app: https://app.fundz.net/lender-intelligence`);
|
|
459
|
+
}
|
|
460
|
+
case "get_money_in_motion": {
|
|
461
|
+
const data = await publicRequest("/money_in_motion", { q: args.q, state: args.state });
|
|
462
|
+
return textResult(formatSectionFeed("Money in Motion", data.money_in_motion || [], data.summary, !!data.meta?.free_tier_limited, "https://app.fundz.net/benefits-intelligence", (r) => [
|
|
463
|
+
r.latest_move_headline ? `${r.latest_move_headline} (${r.latest_move_on})` : null,
|
|
464
|
+
r.latest_funding?.event_date ? `funded ${r.latest_funding.event_date}` : null,
|
|
465
|
+
r.move_count_180d > 1 ? `${r.move_count_180d} exec moves ≤180d` : null,
|
|
466
|
+
r.has_pension_plan ? "retirement plan on record" : null,
|
|
467
|
+
].filter(Boolean).join(" · ")));
|
|
468
|
+
}
|
|
469
|
+
case "get_broker_directory": {
|
|
470
|
+
const data = await publicRequest("/brokers", { q: args.q, state: args.state, page: args.page });
|
|
471
|
+
const brokers = data.brokers || [];
|
|
472
|
+
if (!brokers.length)
|
|
473
|
+
return textResult("No brokers match that search.");
|
|
474
|
+
const fmtUsd = (n) => (n >= 1_000_000 ? `$${(n / 1_000_000).toFixed(1)}M` : `$${Math.round(n / 1000)}K`);
|
|
475
|
+
const lines = brokers.slice(0, 25).map((b, i) => `${i + 1}. **${b.name}**${b.city ? ` (${b.city}, ${b.state})` : ""} — ${b.filings} filings, ` +
|
|
476
|
+
`${b.sponsors} sponsors` +
|
|
477
|
+
(b.commission_usd ? ` · ${fmtUsd(b.commission_usd)} commissions` : "") +
|
|
478
|
+
(b.latest_form_year ? ` · thru ${b.latest_form_year}` : ""));
|
|
479
|
+
return textResult(`Broker Directory — ${data.meta.total_count} brokers of record (${data.meta.coverage}):\n\n${lines.join("\n")}\n\n` +
|
|
480
|
+
`Client lists per broker live in the Fundz app: https://app.fundz.net/benefits-intelligence`);
|
|
481
|
+
}
|
|
275
482
|
default:
|
|
276
483
|
return textResult(`Unknown tool: ${name}`);
|
|
277
484
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/glama.json
ADDED
package/manifest.json
ADDED
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifest_version": "0.2",
|
|
3
|
+
"name": "fundzwatch-mcp",
|
|
4
|
+
"display_name": "FundzWatch",
|
|
5
|
+
"version": "1.2.1",
|
|
6
|
+
"description": "Real-time business event intelligence for AI agents \u2014 AI-scored leads, funding events, refinancing windows (UCC), stacked borrowers, benefit-plan renewals, and watchlists from FundzWatch.ai",
|
|
7
|
+
"long_description": "FundzWatch gives AI agents real-time access to verified business events: funding rounds, executive moves, acquisitions, and AI-scored leads matched to your ideal customer profile. NEW: five no-key-required answer sections \u2014 Funded & Hiring Now, UCC Refinancing Windows (Renewal Radar), Stacked Borrowers, Benefit Plans in Play (Form 5500), and a who-finances-whom Lender Directory \u2014 cross-dataset cohorts no single-source lookup can reproduce, re-scored daily. Manage watchlists and pull daily market briefs. Get a free API key (no credit card) at https://fundzwatch.ai/onboarding.",
|
|
8
|
+
"author": {
|
|
9
|
+
"name": "Fundz Inc.",
|
|
10
|
+
"email": "john@fundz.net",
|
|
11
|
+
"url": "https://fundzwatch.ai"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://fundzwatch.ai",
|
|
14
|
+
"documentation": "https://fundzwatch.ai/docs",
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "https://github.com/Fund-z/fundzwatch-mcp"
|
|
18
|
+
},
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"keywords": [
|
|
21
|
+
"business-events",
|
|
22
|
+
"funding",
|
|
23
|
+
"lead-generation",
|
|
24
|
+
"sales-intelligence",
|
|
25
|
+
"market-intelligence"
|
|
26
|
+
],
|
|
27
|
+
"server": {
|
|
28
|
+
"type": "node",
|
|
29
|
+
"entry_point": "dist/index.js",
|
|
30
|
+
"mcp_config": {
|
|
31
|
+
"command": "node",
|
|
32
|
+
"args": [
|
|
33
|
+
"${__dirname}/dist/index.js"
|
|
34
|
+
],
|
|
35
|
+
"env": {
|
|
36
|
+
"FUNDZWATCH_API_KEY": "${user_config.api_key}"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"user_config": {
|
|
41
|
+
"api_key": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"title": "FundzWatch API Key",
|
|
44
|
+
"description": "Your FundzWatch API key. Get a free key (no credit card) at https://fundzwatch.ai/onboarding",
|
|
45
|
+
"sensitive": true,
|
|
46
|
+
"required": true
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"tools": [
|
|
50
|
+
{
|
|
51
|
+
"name": "get_scored_leads",
|
|
52
|
+
"description": "AI-scored sales leads based on your ICP with buyer intent, buying stage, and recommended outreach strategy",
|
|
53
|
+
"inputSchema": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"properties": {
|
|
56
|
+
"min_score": {
|
|
57
|
+
"type": "number",
|
|
58
|
+
"description": "Minimum buyer intent score (0-100). Default: 0"
|
|
59
|
+
},
|
|
60
|
+
"max_results": {
|
|
61
|
+
"type": "number",
|
|
62
|
+
"description": "Max leads to return (1-50). Default: 25"
|
|
63
|
+
},
|
|
64
|
+
"buying_stages": {
|
|
65
|
+
"type": "array",
|
|
66
|
+
"items": {
|
|
67
|
+
"type": "string"
|
|
68
|
+
},
|
|
69
|
+
"description": "Filter by buying stage: 'Active Evaluation', 'Decision', 'Research', 'Awareness'"
|
|
70
|
+
},
|
|
71
|
+
"industries": {
|
|
72
|
+
"type": "array",
|
|
73
|
+
"items": {
|
|
74
|
+
"type": "string"
|
|
75
|
+
},
|
|
76
|
+
"description": "Filter by industry (e.g., ['SaaS', 'HealthTech', 'FinTech'])"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"name": "get_events",
|
|
83
|
+
"description": "Real-time business events: funding rounds, acquisitions, executive hires, government contracts, product launches",
|
|
84
|
+
"inputSchema": {
|
|
85
|
+
"type": "object",
|
|
86
|
+
"properties": {
|
|
87
|
+
"types": {
|
|
88
|
+
"type": "string",
|
|
89
|
+
"description": "Comma-separated: funding, acquisition, hiring, contract, product_launch. Default: all"
|
|
90
|
+
},
|
|
91
|
+
"days": {
|
|
92
|
+
"type": "number",
|
|
93
|
+
"description": "Look back days (1-90). Default: 7"
|
|
94
|
+
},
|
|
95
|
+
"limit": {
|
|
96
|
+
"type": "number",
|
|
97
|
+
"description": "Max events (1-200). Default: 50"
|
|
98
|
+
},
|
|
99
|
+
"industries": {
|
|
100
|
+
"type": "string",
|
|
101
|
+
"description": "Comma-separated industries"
|
|
102
|
+
},
|
|
103
|
+
"locations": {
|
|
104
|
+
"type": "string",
|
|
105
|
+
"description": "Comma-separated locations"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"name": "get_market_pulse",
|
|
112
|
+
"description": "Real-time market activity overview: funding totals, acquisitions, exec moves for the past 7 and 30 days",
|
|
113
|
+
"inputSchema": {
|
|
114
|
+
"type": "object",
|
|
115
|
+
"properties": {}
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"name": "get_market_brief",
|
|
120
|
+
"description": "Today's AI-generated strategic intelligence brief on market movements, patterns, and opportunities",
|
|
121
|
+
"inputSchema": {
|
|
122
|
+
"type": "object",
|
|
123
|
+
"properties": {}
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"name": "manage_watchlist",
|
|
128
|
+
"description": "Add, remove, or list companies on your watchlist; tracked companies generate alerts on new events",
|
|
129
|
+
"inputSchema": {
|
|
130
|
+
"type": "object",
|
|
131
|
+
"properties": {
|
|
132
|
+
"action": {
|
|
133
|
+
"type": "string",
|
|
134
|
+
"enum": [
|
|
135
|
+
"list",
|
|
136
|
+
"add",
|
|
137
|
+
"remove"
|
|
138
|
+
],
|
|
139
|
+
"description": "Action: 'list' to view, 'add' to track, 'remove' to untrack"
|
|
140
|
+
},
|
|
141
|
+
"domains": {
|
|
142
|
+
"type": "array",
|
|
143
|
+
"items": {
|
|
144
|
+
"type": "string"
|
|
145
|
+
},
|
|
146
|
+
"description": "Company domains for add/remove (e.g., ['stripe.com', 'github.com'])"
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
"required": [
|
|
150
|
+
"action"
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"name": "get_watchlist_events",
|
|
156
|
+
"description": "Recent events for companies on your watchlist: funding, acquisitions, exec hires, contracts",
|
|
157
|
+
"inputSchema": {
|
|
158
|
+
"type": "object",
|
|
159
|
+
"properties": {
|
|
160
|
+
"days": {
|
|
161
|
+
"type": "number",
|
|
162
|
+
"description": "Look back days (1-90). Default: 7"
|
|
163
|
+
},
|
|
164
|
+
"types": {
|
|
165
|
+
"type": "string",
|
|
166
|
+
"description": "Comma-separated event types"
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"name": "get_usage",
|
|
173
|
+
"description": "Check your FundzWatch API usage: calls made, limits, current tier",
|
|
174
|
+
"inputSchema": {
|
|
175
|
+
"type": "object",
|
|
176
|
+
"properties": {}
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"name": "get_funded_and_hiring",
|
|
181
|
+
"description": "Companies funded in the last 12 months AND actively hiring (open roles, exec hires, hiring signals) \u2014 score-ranked daily. No API key required.",
|
|
182
|
+
"inputSchema": {
|
|
183
|
+
"type": "object",
|
|
184
|
+
"properties": {
|
|
185
|
+
"q": {
|
|
186
|
+
"type": "string",
|
|
187
|
+
"description": "Company name search"
|
|
188
|
+
},
|
|
189
|
+
"state": {
|
|
190
|
+
"type": "string",
|
|
191
|
+
"description": "2-letter US state filter (e.g. 'CA')"
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"name": "get_refinancing_windows",
|
|
198
|
+
"description": "Companies whose active UCC-1 liens lapse within 12 months \u2014 each approaching lapse is a refinancing window with a date on it. For lenders, MCA/ISO, equipment finance. No API key required.",
|
|
199
|
+
"inputSchema": {
|
|
200
|
+
"type": "object",
|
|
201
|
+
"properties": {
|
|
202
|
+
"q": {
|
|
203
|
+
"type": "string",
|
|
204
|
+
"description": "Company name search"
|
|
205
|
+
},
|
|
206
|
+
"state": {
|
|
207
|
+
"type": "string",
|
|
208
|
+
"description": "2-letter US state filter (e.g. 'CA')"
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"name": "get_stacked_borrowers",
|
|
215
|
+
"description": "Companies with active secured debt from 2+ distinct lenders (UCC) \u2014 second-position and consolidation targets. No API key required.",
|
|
216
|
+
"inputSchema": {
|
|
217
|
+
"type": "object",
|
|
218
|
+
"properties": {
|
|
219
|
+
"q": {
|
|
220
|
+
"type": "string",
|
|
221
|
+
"description": "Company name search"
|
|
222
|
+
},
|
|
223
|
+
"state": {
|
|
224
|
+
"type": "string",
|
|
225
|
+
"description": "2-letter US state filter (e.g. 'CA')"
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"name": "get_benefit_plans_in_play",
|
|
232
|
+
"description": "Recently funded companies with a Form 5500 benefit plan on record \u2014 renewal timing, headcount-vs-plan gap, incumbent carrier. No API key required.",
|
|
233
|
+
"inputSchema": {
|
|
234
|
+
"type": "object",
|
|
235
|
+
"properties": {
|
|
236
|
+
"q": {
|
|
237
|
+
"type": "string",
|
|
238
|
+
"description": "Company name search"
|
|
239
|
+
},
|
|
240
|
+
"state": {
|
|
241
|
+
"type": "string",
|
|
242
|
+
"description": "2-letter US state filter (e.g. 'CA')"
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"name": "get_lender_directory",
|
|
249
|
+
"description": "Directory of 8,600+ UCC secured parties ranked by filing volume, with lapsing-soon exposure per lender. No API key required.",
|
|
250
|
+
"inputSchema": {
|
|
251
|
+
"type": "object",
|
|
252
|
+
"properties": {
|
|
253
|
+
"q": {
|
|
254
|
+
"type": "string",
|
|
255
|
+
"description": "Lender name search"
|
|
256
|
+
},
|
|
257
|
+
"page": {
|
|
258
|
+
"type": "number",
|
|
259
|
+
"description": "Page (50/page)"
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"name": "get_money_in_motion",
|
|
266
|
+
"description": "Companies with an executive-move announcement in the last 180 days AND a verified funding round in the last 24 months \u2014 the wealth advisor's 'money in motion' moment: a new comp package (often equity), an old 401(k) to roll over, benefits about to be re-evaluated. Score-ranked, refreshed daily. For RIAs, wealth managers, retirement-plan advisors, executive-benefits sellers. No API key required.",
|
|
267
|
+
"inputSchema": {
|
|
268
|
+
"type": "object",
|
|
269
|
+
"properties": {
|
|
270
|
+
"q": {
|
|
271
|
+
"type": "string",
|
|
272
|
+
"description": "Company name search"
|
|
273
|
+
},
|
|
274
|
+
"state": {
|
|
275
|
+
"type": "string",
|
|
276
|
+
"description": "2-letter US state filter (e.g. 'CA')"
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"name": "get_broker_directory",
|
|
283
|
+
"description": "Who broker-of-records whom: directory of 65,000+ benefits brokers from DOL Form 5500 Schedule A Part 1, ranked by filings carried, with sponsor counts and commission volume per broker. For carriers, broker M&A, benefits-tech sellers, and brokers scouting competitors. No API key required.",
|
|
284
|
+
"inputSchema": {
|
|
285
|
+
"type": "object",
|
|
286
|
+
"properties": {
|
|
287
|
+
"q": {
|
|
288
|
+
"type": "string",
|
|
289
|
+
"description": "Broker name search (e.g. 'Lockton')"
|
|
290
|
+
},
|
|
291
|
+
"state": {
|
|
292
|
+
"type": "string",
|
|
293
|
+
"description": "2-letter US state filter"
|
|
294
|
+
},
|
|
295
|
+
"page": {
|
|
296
|
+
"type": "number",
|
|
297
|
+
"description": "Page (50/page). Default: 1"
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
],
|
|
303
|
+
"compatibility": {
|
|
304
|
+
"platforms": [
|
|
305
|
+
"darwin",
|
|
306
|
+
"linux",
|
|
307
|
+
"win32"
|
|
308
|
+
],
|
|
309
|
+
"runtimes": {
|
|
310
|
+
"node": ">=18"
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
package/package.json
CHANGED
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fundzwatch/mcp-server",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"
|
|
3
|
+
"version": "1.2.1",
|
|
4
|
+
"mcpName": "io.github.fund-z/fundzwatch",
|
|
5
|
+
"description": "MCP server for FundzWatch.ai \u2014 real-time business-event intelligence for AI agents: 14 tools (7 key-less) covering AI-scored leads, funding & exec moves, UCC refinancing windows, and Form 5500 benefit-plan signals",
|
|
5
6
|
"main": "dist/index.js",
|
|
6
7
|
"bin": {
|
|
7
8
|
"fundzwatch-mcp": "./dist/index.js"
|
|
8
9
|
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"manifest.json",
|
|
13
|
+
"server.json",
|
|
14
|
+
"smithery.yaml",
|
|
15
|
+
"glama.json",
|
|
16
|
+
"README.md",
|
|
17
|
+
"LICENSE"
|
|
18
|
+
],
|
|
9
19
|
"scripts": {
|
|
10
20
|
"build": "tsc && node -e \"const fs=require('fs');const f='dist/index.js';const c=fs.readFileSync(f,'utf8');if(!c.startsWith('#!')){fs.writeFileSync(f,'#!/usr/bin/env node\\n'+c);}\" && chmod +x dist/index.js",
|
|
11
21
|
"dev": "ts-node src/index.ts",
|
|
@@ -25,7 +35,11 @@
|
|
|
25
35
|
"license": "MIT",
|
|
26
36
|
"repository": {
|
|
27
37
|
"type": "git",
|
|
28
|
-
"url": "https://github.com/
|
|
38
|
+
"url": "https://github.com/Fund-z/fundzwatch-mcp"
|
|
39
|
+
},
|
|
40
|
+
"homepage": "https://fundzwatch.ai",
|
|
41
|
+
"bugs": {
|
|
42
|
+
"url": "https://github.com/Fund-z/fundzwatch-mcp/issues"
|
|
29
43
|
},
|
|
30
44
|
"dependencies": {
|
|
31
45
|
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
@@ -39,4 +53,4 @@
|
|
|
39
53
|
"engines": {
|
|
40
54
|
"node": ">=18.0.0"
|
|
41
55
|
}
|
|
42
|
-
}
|
|
56
|
+
}
|
package/server.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "io.github.fund-z/fundzwatch",
|
|
4
|
+
"description": "Real-time business-event intelligence for AI agents: AI-scored leads, funding & exec moves, UCC refinancing windows, and Form 5500 benefit-plan signals. 7 tools need no key.",
|
|
5
|
+
"version": "1.2.1",
|
|
6
|
+
"repository": {
|
|
7
|
+
"url": "https://github.com/Fund-z/fundzwatch-mcp",
|
|
8
|
+
"source": "github"
|
|
9
|
+
},
|
|
10
|
+
"websiteUrl": "https://fundzwatch.ai",
|
|
11
|
+
"packages": [
|
|
12
|
+
{
|
|
13
|
+
"registryType": "npm",
|
|
14
|
+
"registryBaseUrl": "https://registry.npmjs.org",
|
|
15
|
+
"identifier": "@fundzwatch/mcp-server",
|
|
16
|
+
"version": "1.2.1",
|
|
17
|
+
"transport": {
|
|
18
|
+
"type": "stdio"
|
|
19
|
+
},
|
|
20
|
+
"environmentVariables": [
|
|
21
|
+
{
|
|
22
|
+
"name": "FUNDZWATCH_API_KEY",
|
|
23
|
+
"description": "FundzWatch API key (optional — 7 tools work without it). Free key at https://fundzwatch.ai/onboarding",
|
|
24
|
+
"isRequired": false,
|
|
25
|
+
"isSecret": true
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
package/smithery.yaml
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Smithery configuration — lets smithery.ai index, configure, and launch this
|
|
2
|
+
# MCP server. https://smithery.ai/docs/build/project-config
|
|
3
|
+
startCommand:
|
|
4
|
+
type: stdio
|
|
5
|
+
configSchema:
|
|
6
|
+
type: object
|
|
7
|
+
required:
|
|
8
|
+
- fundzwatchApiKey
|
|
9
|
+
properties:
|
|
10
|
+
fundzwatchApiKey:
|
|
11
|
+
type: string
|
|
12
|
+
title: FundzWatch API Key
|
|
13
|
+
description: >-
|
|
14
|
+
Your FundzWatch API key. Get a free key (no credit card) at
|
|
15
|
+
https://fundzwatch.ai/onboarding
|
|
16
|
+
commandFunction: |-
|
|
17
|
+
(config) => ({
|
|
18
|
+
command: 'npx',
|
|
19
|
+
args: ['-y', '@fundzwatch/mcp-server'],
|
|
20
|
+
env: { FUNDZWATCH_API_KEY: config.fundzwatchApiKey }
|
|
21
|
+
})
|
|
22
|
+
exampleConfig:
|
|
23
|
+
fundzwatchApiKey: fundz_test_your_key_here
|
package/src/index.ts
DELETED
|
@@ -1,342 +0,0 @@
|
|
|
1
|
-
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
|
-
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
-
import {
|
|
4
|
-
CallToolRequestSchema,
|
|
5
|
-
ListToolsRequestSchema,
|
|
6
|
-
} from "@modelcontextprotocol/sdk/types.js";
|
|
7
|
-
|
|
8
|
-
const API_BASE = "https://api.fundz.net/v1/watch";
|
|
9
|
-
|
|
10
|
-
function getApiKey(): string {
|
|
11
|
-
const key = process.env.FUNDZWATCH_API_KEY;
|
|
12
|
-
if (!key) {
|
|
13
|
-
throw new Error(
|
|
14
|
-
"FUNDZWATCH_API_KEY environment variable is required. " +
|
|
15
|
-
"Get a free key at https://fundzwatch.ai/onboarding"
|
|
16
|
-
);
|
|
17
|
-
}
|
|
18
|
-
return key;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
async function apiRequest(
|
|
22
|
-
method: string,
|
|
23
|
-
path: string,
|
|
24
|
-
params?: Record<string, any>
|
|
25
|
-
): Promise<any> {
|
|
26
|
-
const apiKey = getApiKey();
|
|
27
|
-
const url = new URL(`${API_BASE}${path}`);
|
|
28
|
-
|
|
29
|
-
const options: RequestInit = {
|
|
30
|
-
method,
|
|
31
|
-
headers: {
|
|
32
|
-
Authorization: `Bearer ${apiKey}`,
|
|
33
|
-
"Content-Type": "application/json",
|
|
34
|
-
"User-Agent": "fundzwatch-mcp/1.0.0",
|
|
35
|
-
},
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
if (method === "GET" && params) {
|
|
39
|
-
Object.entries(params).forEach(([key, value]) => {
|
|
40
|
-
if (value !== undefined && value !== null) {
|
|
41
|
-
url.searchParams.append(key, String(value));
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
} else if (method !== "GET" && params) {
|
|
45
|
-
options.body = JSON.stringify(params);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const response = await fetch(url.toString(), options);
|
|
49
|
-
|
|
50
|
-
if (!response.ok) {
|
|
51
|
-
const errBody: any = await response.json().catch(() => ({ message: response.statusText }));
|
|
52
|
-
throw new Error(`API error ${response.status}: ${errBody.message || errBody.error || response.statusText}`);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return response.json();
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function textResult(text: string) {
|
|
59
|
-
return { content: [{ type: "text" as const, text }] };
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// ─── Server Setup ───────────────────────────────────────────────────────
|
|
63
|
-
|
|
64
|
-
const server = new Server(
|
|
65
|
-
{ name: "fundzwatch", version: "1.0.0" },
|
|
66
|
-
{ capabilities: { tools: {} } }
|
|
67
|
-
);
|
|
68
|
-
|
|
69
|
-
// ─── List Tools ─────────────────────────────────────────────────────────
|
|
70
|
-
|
|
71
|
-
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
72
|
-
tools: [
|
|
73
|
-
{
|
|
74
|
-
name: "get_scored_leads",
|
|
75
|
-
description:
|
|
76
|
-
"Get AI-scored sales leads based on your ICP (Ideal Customer Profile). " +
|
|
77
|
-
"Returns companies with recent business events scored by AI for buyer intent, " +
|
|
78
|
-
"buying stage, and recommended outreach strategy.",
|
|
79
|
-
inputSchema: {
|
|
80
|
-
type: "object" as const,
|
|
81
|
-
properties: {
|
|
82
|
-
min_score: { type: "number", description: "Minimum buyer intent score (0-100). Default: 0" },
|
|
83
|
-
max_results: { type: "number", description: "Max leads to return (1-50). Default: 25" },
|
|
84
|
-
buying_stages: {
|
|
85
|
-
type: "array",
|
|
86
|
-
items: { type: "string" },
|
|
87
|
-
description: "Filter by buying stage: 'Active Evaluation', 'Decision', 'Research', 'Awareness'",
|
|
88
|
-
},
|
|
89
|
-
industries: {
|
|
90
|
-
type: "array",
|
|
91
|
-
items: { type: "string" },
|
|
92
|
-
description: "Filter by industry (e.g., ['SaaS', 'HealthTech', 'FinTech'])",
|
|
93
|
-
},
|
|
94
|
-
},
|
|
95
|
-
},
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
name: "get_events",
|
|
99
|
-
description:
|
|
100
|
-
"Get real-time business events: funding rounds, acquisitions, executive hires, " +
|
|
101
|
-
"government contracts, and product launches. Filter by type, industry, and location.",
|
|
102
|
-
inputSchema: {
|
|
103
|
-
type: "object" as const,
|
|
104
|
-
properties: {
|
|
105
|
-
types: { type: "string", description: "Comma-separated: funding, acquisition, hiring, contract, product_launch. Default: all" },
|
|
106
|
-
days: { type: "number", description: "Look back days (1-90). Default: 7" },
|
|
107
|
-
limit: { type: "number", description: "Max events (1-200). Default: 50" },
|
|
108
|
-
industries: { type: "string", description: "Comma-separated industries" },
|
|
109
|
-
locations: { type: "string", description: "Comma-separated locations" },
|
|
110
|
-
},
|
|
111
|
-
},
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
name: "get_market_pulse",
|
|
115
|
-
description:
|
|
116
|
-
"Get real-time market activity overview: funding totals, acquisition counts, " +
|
|
117
|
-
"executive moves, contracts, and product launches for the past 7 and 30 days.",
|
|
118
|
-
inputSchema: { type: "object" as const, properties: {} },
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
name: "get_market_brief",
|
|
122
|
-
description:
|
|
123
|
-
"Get today's AI-generated strategic intelligence brief with narrative analysis " +
|
|
124
|
-
"of the most important market movements, patterns, and opportunities.",
|
|
125
|
-
inputSchema: { type: "object" as const, properties: {} },
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
name: "manage_watchlist",
|
|
129
|
-
description:
|
|
130
|
-
"Add, remove, or list companies on your watchlist. Tracked companies generate " +
|
|
131
|
-
"alerts when they have new events.",
|
|
132
|
-
inputSchema: {
|
|
133
|
-
type: "object" as const,
|
|
134
|
-
properties: {
|
|
135
|
-
action: {
|
|
136
|
-
type: "string",
|
|
137
|
-
enum: ["list", "add", "remove"],
|
|
138
|
-
description: "Action: 'list' to view, 'add' to track, 'remove' to untrack",
|
|
139
|
-
},
|
|
140
|
-
domains: {
|
|
141
|
-
type: "array",
|
|
142
|
-
items: { type: "string" },
|
|
143
|
-
description: "Company domains for add/remove (e.g., ['stripe.com', 'github.com'])",
|
|
144
|
-
},
|
|
145
|
-
},
|
|
146
|
-
required: ["action"],
|
|
147
|
-
},
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
name: "get_watchlist_events",
|
|
151
|
-
description:
|
|
152
|
-
"Get recent events for companies on your watchlist: funding, acquisitions, " +
|
|
153
|
-
"executive hires, contracts.",
|
|
154
|
-
inputSchema: {
|
|
155
|
-
type: "object" as const,
|
|
156
|
-
properties: {
|
|
157
|
-
days: { type: "number", description: "Look back days (1-90). Default: 7" },
|
|
158
|
-
types: { type: "string", description: "Comma-separated event types" },
|
|
159
|
-
},
|
|
160
|
-
},
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
name: "get_usage",
|
|
164
|
-
description: "Check your FundzWatch API usage: calls made, limits, current tier.",
|
|
165
|
-
inputSchema: { type: "object" as const, properties: {} },
|
|
166
|
-
},
|
|
167
|
-
],
|
|
168
|
-
}));
|
|
169
|
-
|
|
170
|
-
// ─── Handle Tool Calls ──────────────────────────────────────────────────
|
|
171
|
-
|
|
172
|
-
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
173
|
-
const { name, arguments: args = {} } = request.params;
|
|
174
|
-
|
|
175
|
-
try {
|
|
176
|
-
switch (name) {
|
|
177
|
-
case "get_scored_leads": {
|
|
178
|
-
const data = await apiRequest("POST", "/signals", {
|
|
179
|
-
min_score: (args as any).min_score ?? 0,
|
|
180
|
-
max_results: (args as any).max_results ?? 25,
|
|
181
|
-
buying_stages: (args as any).buying_stages,
|
|
182
|
-
industries: (args as any).industries,
|
|
183
|
-
});
|
|
184
|
-
const leads = data.signals || [];
|
|
185
|
-
if (leads.length === 0) {
|
|
186
|
-
return textResult("No scored leads found for your current ICP. Leads are generated daily by the AI scoring engine.");
|
|
187
|
-
}
|
|
188
|
-
const summary = leads
|
|
189
|
-
.map(
|
|
190
|
-
(lead: any, i: number) =>
|
|
191
|
-
`${i + 1}. **${lead.company_name}** (Score: ${lead.score}/100)\n` +
|
|
192
|
-
` Stage: ${lead.buying_stage} | Priority: ${lead.priority}\n` +
|
|
193
|
-
` Pain Point: ${lead.pain_point}\n` +
|
|
194
|
-
` Outreach: ${lead.outreach_angle}\n` +
|
|
195
|
-
` Action: ${lead.recommended_action}\n` +
|
|
196
|
-
(lead.domain ? ` Domain: ${lead.domain}\n` : "") +
|
|
197
|
-
(lead.industries?.length ? ` Industries: ${lead.industries.join(", ")}\n` : "")
|
|
198
|
-
)
|
|
199
|
-
.join("\n");
|
|
200
|
-
return textResult(`Found ${data.signals_found} scored leads (showing ${leads.length}):\n\n${summary}`);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
case "get_events": {
|
|
204
|
-
const data = await apiRequest("GET", "/events", {
|
|
205
|
-
types: (args as any).types,
|
|
206
|
-
days: (args as any).days,
|
|
207
|
-
limit: (args as any).limit,
|
|
208
|
-
industries: (args as any).industries,
|
|
209
|
-
locations: (args as any).locations,
|
|
210
|
-
});
|
|
211
|
-
const events = data.events || [];
|
|
212
|
-
if (events.length === 0) {
|
|
213
|
-
return textResult("No events found matching your filters.");
|
|
214
|
-
}
|
|
215
|
-
const summary = events
|
|
216
|
-
.map((e: any, i: number) => {
|
|
217
|
-
let detail = `${i + 1}. [${e.type.toUpperCase()}] ${e.title}`;
|
|
218
|
-
if (e.amount) detail += ` ($${(e.amount / 1_000_000).toFixed(1)}M)`;
|
|
219
|
-
if (e.series) detail += ` - ${e.series}`;
|
|
220
|
-
if (e.date) detail += ` | ${e.date}`;
|
|
221
|
-
return detail;
|
|
222
|
-
})
|
|
223
|
-
.join("\n");
|
|
224
|
-
return textResult(`${data.total} events found (showing ${events.length}):\n\n${summary}`);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
case "get_market_pulse": {
|
|
228
|
-
const data = await apiRequest("GET", "/market/pulse");
|
|
229
|
-
const p = data.pulse;
|
|
230
|
-
const text =
|
|
231
|
-
`Market Pulse (as of ${p.generated_at}):\n\n` +
|
|
232
|
-
`Funding: ${p.funding.count_7d} rounds this week (${p.funding.count_30d} this month), ` +
|
|
233
|
-
`$${(p.funding.total_raised_7d / 1_000_000).toFixed(0)}M raised this week\n` +
|
|
234
|
-
`Acquisitions: ${p.acquisitions.count_7d} this week (${p.acquisitions.count_30d} this month)\n` +
|
|
235
|
-
`Executive Moves: ${p.executive_moves.count_7d} this week (${p.executive_moves.count_30d} this month)\n` +
|
|
236
|
-
`Contracts: ${p.contracts.count_7d} this week (${p.contracts.count_30d} this month)\n` +
|
|
237
|
-
`Product Launches: ${p.product_launches.count_7d} this week (${p.product_launches.count_30d} this month)\n\n` +
|
|
238
|
-
`Largest Rounds This Week:\n` +
|
|
239
|
-
(p.funding.largest_round || [])
|
|
240
|
-
.map((r: any, i: number) => ` ${i + 1}. ${r.title} - $${(r.amount / 1_000_000).toFixed(1)}M`)
|
|
241
|
-
.join("\n");
|
|
242
|
-
return textResult(text);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
case "get_market_brief": {
|
|
246
|
-
const data = await apiRequest("GET", "/market/brief");
|
|
247
|
-
const brief = data.brief;
|
|
248
|
-
return textResult(
|
|
249
|
-
`Strategic Intelligence Brief (${brief.date}):\n\n${brief.text}\n\n` +
|
|
250
|
-
`Companies mentioned: ${(brief.companies || []).join(", ")}`
|
|
251
|
-
);
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
case "manage_watchlist": {
|
|
255
|
-
const action = (args as any).action;
|
|
256
|
-
const domains = (args as any).domains;
|
|
257
|
-
|
|
258
|
-
if (action === "list") {
|
|
259
|
-
const data = await apiRequest("GET", "/watchlist");
|
|
260
|
-
const companies = data.companies || [];
|
|
261
|
-
if (companies.length === 0) {
|
|
262
|
-
return textResult("Your watchlist is empty. Add companies with the 'add' action.");
|
|
263
|
-
}
|
|
264
|
-
const list = companies
|
|
265
|
-
.map((c: any) => `- ${c.name || c.domain} (${c.domain})${c.matched ? "" : " [pending match]"}`)
|
|
266
|
-
.join("\n");
|
|
267
|
-
return textResult(`Watchlist (${data.total}/${data.limit} slots used):\n\n${list}`);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
if (!domains || domains.length === 0) {
|
|
271
|
-
return textResult("Please provide domains to add or remove.");
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
if (action === "add") {
|
|
275
|
-
const data = await apiRequest("POST", "/watchlist", { domains });
|
|
276
|
-
return textResult(
|
|
277
|
-
`Added ${data.added} companies. Already tracked: ${data.already_tracked}. ` +
|
|
278
|
-
`Not found: ${data.not_found}. Total tracked: ${data.total_tracked}.`
|
|
279
|
-
);
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
if (action === "remove") {
|
|
283
|
-
const data = await apiRequest("DELETE", "/watchlist", { domains });
|
|
284
|
-
return textResult(`Removed ${data.removed} companies. Total tracked: ${data.total_tracked}.`);
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
return textResult("Invalid action. Use 'list', 'add', or 'remove'.");
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
case "get_watchlist_events": {
|
|
291
|
-
const data = await apiRequest("GET", "/watchlist/events", {
|
|
292
|
-
days: (args as any).days,
|
|
293
|
-
types: (args as any).types,
|
|
294
|
-
});
|
|
295
|
-
const events = data.events || [];
|
|
296
|
-
if (events.length === 0) {
|
|
297
|
-
return textResult(
|
|
298
|
-
`No events found for your ${data.tracked_companies} tracked companies in the last ${data.period_days} days.`
|
|
299
|
-
);
|
|
300
|
-
}
|
|
301
|
-
const summary = events
|
|
302
|
-
.map((e: any, i: number) => {
|
|
303
|
-
let detail = `${i + 1}. [${e.type.toUpperCase()}] ${e.company_name}: ${e.title}`;
|
|
304
|
-
if (e.amount) detail += ` ($${(e.amount / 1_000_000).toFixed(1)}M)`;
|
|
305
|
-
if (e.date) detail += ` | ${e.date}`;
|
|
306
|
-
return detail;
|
|
307
|
-
})
|
|
308
|
-
.join("\n");
|
|
309
|
-
return textResult(`${data.total} events for ${data.tracked_companies} tracked companies:\n\n${summary}`);
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
case "get_usage": {
|
|
313
|
-
const data = await apiRequest("GET", "/usage");
|
|
314
|
-
const text =
|
|
315
|
-
`FundzWatch Usage (${data.current_period}):\n\n` +
|
|
316
|
-
`Tier: ${data.tier}\n` +
|
|
317
|
-
`API Calls: ${data.api_calls_used} / ${data.limits.api_calls_monthly}\n` +
|
|
318
|
-
`AI Score Calls: ${data.ai_score_calls_used} / ${data.limits.ai_score_calls_monthly}\n` +
|
|
319
|
-
(data.last_api_call ? `Last API Call: ${data.last_api_call}` : "");
|
|
320
|
-
return textResult(text);
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
default:
|
|
324
|
-
return textResult(`Unknown tool: ${name}`);
|
|
325
|
-
}
|
|
326
|
-
} catch (err: any) {
|
|
327
|
-
return textResult(`Error: ${err.message}`);
|
|
328
|
-
}
|
|
329
|
-
});
|
|
330
|
-
|
|
331
|
-
// ─── Start Server ───────────────────────────────────────────────────────
|
|
332
|
-
|
|
333
|
-
async function main() {
|
|
334
|
-
const transport = new StdioServerTransport();
|
|
335
|
-
await server.connect(transport);
|
|
336
|
-
console.error("FundzWatch MCP server running on stdio");
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
main().catch((error) => {
|
|
340
|
-
console.error("Fatal error:", error);
|
|
341
|
-
process.exit(1);
|
|
342
|
-
});
|
package/tsconfig.json
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2022",
|
|
4
|
-
"module": "commonjs",
|
|
5
|
-
"lib": ["ES2022"],
|
|
6
|
-
"outDir": "./dist",
|
|
7
|
-
"rootDir": "./src",
|
|
8
|
-
"strict": true,
|
|
9
|
-
"esModuleInterop": true,
|
|
10
|
-
"skipLibCheck": true,
|
|
11
|
-
"forceConsistentCasingInFileNames": true,
|
|
12
|
-
"resolveJsonModule": true,
|
|
13
|
-
"declaration": true,
|
|
14
|
-
"declarationMap": true,
|
|
15
|
-
"sourceMap": true
|
|
16
|
-
},
|
|
17
|
-
"include": ["src/**/*"],
|
|
18
|
-
"exclude": ["node_modules", "dist"]
|
|
19
|
-
}
|