dynamicfeed-mcp 1.0.0

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 (3) hide show
  1. package/README.md +47 -0
  2. package/index.js +63 -0
  3. package/package.json +37 -0
package/README.md ADDED
@@ -0,0 +1,47 @@
1
+ # dynamicfeed-mcp
2
+
3
+ Local **stdio MCP server** for [Dynamic Feed](https://dynamicfeed.ai) — the fresh, live data AI models
4
+ don't have on their own: market prices, weather, software versions, CVEs **& actively-exploited vulns**,
5
+ internet outages, global disasters, earthquakes/wildfires, satellites & space weather, world news, flights,
6
+ AI model pricing, the MCP registry, and more — **33 tools across 16 verticals**, all keyless.
7
+
8
+ This bridge speaks MCP over **stdio** to your local client and proxies to the remote Dynamic Feed endpoint
9
+ over ordinary outbound HTTPS — so it works through corporate firewalls/VPNs that block remote SSE streams,
10
+ and it always exposes whatever tools the live server has (nothing hard-coded to drift).
11
+
12
+ > Prefer a remote URL? You don't even need this package — point any MCP client at
13
+ > `https://dynamicfeed.ai/mcp` (it auto-detects modern Streamable HTTP **and** legacy SSE). This runner is
14
+ > for clients that only accept a local `command`, or networks that block remote streaming.
15
+
16
+ ## Use it
17
+
18
+ **Claude Desktop / Cursor / Windsurf** — add to your MCP config:
19
+
20
+ ```json
21
+ {
22
+ "mcpServers": {
23
+ "dynamic-feed": {
24
+ "command": "npx",
25
+ "args": ["-y", "dynamicfeed-mcp"]
26
+ }
27
+ }
28
+ }
29
+ ```
30
+
31
+ That's it — no API key required (the MCP tools are keyless). Restart your client and the Dynamic Feed tools
32
+ appear.
33
+
34
+ ## Options (env vars)
35
+
36
+ | Variable | Default | Purpose |
37
+ |---|---|---|
38
+ | `DYNAMICFEED_MCP_URL` | `https://dynamicfeed.ai/mcp` | Override the upstream endpoint |
39
+ | `DYNAMICFEED_API_KEY` | _(none)_ | Optional `X-API-Key` (tools are keyless, so rarely needed) |
40
+
41
+ ## Example tools
42
+
43
+ `asset_price` · `current_weather` · `exploited_vulnerabilities` · `internet_outages` ·
44
+ `global_disasters` · `earthquakes` · `wildfires` · `satellite_position` · `space_weather` ·
45
+ `world_news` · `software_version` · `security_advisories` · `live_flights` … and more.
46
+
47
+ MIT · [dynamicfeed.ai](https://dynamicfeed.ai)
package/index.js ADDED
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Dynamic Feed — local stdio MCP server.
4
+ *
5
+ * A thin bridge: speaks MCP over stdio to your local client (Claude Desktop, Cursor, Windsurf, …)
6
+ * and proxies every request to the remote Dynamic Feed MCP endpoint over Streamable HTTP. Because the
7
+ * upstream hop is ordinary outbound HTTPS request/response (not a long-lived SSE stream), this works
8
+ * through corporate firewalls / VPNs that block remote SSE — and it always exposes whatever tools the
9
+ * live server has (no hard-coded list to drift).
10
+ *
11
+ * Claude Desktop / Cursor config:
12
+ * { "mcpServers": { "dynamic-feed": { "command": "npx", "args": ["-y", "dynamicfeed-mcp"] } } }
13
+ *
14
+ * Env:
15
+ * DYNAMICFEED_MCP_URL override the upstream endpoint (default https://dynamicfeed.ai/mcp)
16
+ * DYNAMICFEED_API_KEY optional; sent as X-API-Key (the MCP tools are keyless, so usually unneeded)
17
+ */
18
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
19
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
20
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
21
+ import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
22
+ import { ListToolsRequestSchema, CallToolRequestSchema } from "@modelcontextprotocol/sdk/types.js";
23
+
24
+ const REMOTE = process.env.DYNAMICFEED_MCP_URL || "https://dynamicfeed.ai/mcp";
25
+ const API_KEY = process.env.DYNAMICFEED_API_KEY || "";
26
+
27
+ function log(msg) {
28
+ process.stderr.write(`[dynamicfeed] ${msg}\n`);
29
+ }
30
+
31
+ async function main() {
32
+ // 1) Connect to the live Dynamic Feed MCP (Streamable HTTP — firewall-friendly outbound HTTPS).
33
+ const requestInit = API_KEY ? { headers: { "X-API-Key": API_KEY } } : undefined;
34
+ const upstream = new Client(
35
+ { name: "dynamicfeed-stdio", version: "1.0.0" },
36
+ { capabilities: {} }
37
+ );
38
+ await upstream.connect(new StreamableHTTPClientTransport(new URL(REMOTE), { requestInit }));
39
+ log(`connected upstream → ${REMOTE}`);
40
+
41
+ // 2) Re-expose those tools to the local client over stdio.
42
+ const server = new Server(
43
+ { name: "dynamic-feed", version: "1.0.0" },
44
+ { capabilities: { tools: {} } }
45
+ );
46
+
47
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
48
+ const { tools } = await upstream.listTools();
49
+ return { tools };
50
+ });
51
+
52
+ server.setRequestHandler(CallToolRequestSchema, async (req) => {
53
+ return await upstream.callTool(req.params);
54
+ });
55
+
56
+ await server.connect(new StdioServerTransport());
57
+ log("stdio bridge ready — Dynamic Feed tools available to your client");
58
+ }
59
+
60
+ main().catch((err) => {
61
+ log(`fatal: ${err?.stack || err}`);
62
+ process.exit(1);
63
+ });
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "dynamicfeed-mcp",
3
+ "version": "1.0.0",
4
+ "description": "Local stdio MCP server for Dynamic Feed — live data AI models lack (prices, weather, CVEs & exploited vulns, internet outages, global disasters, satellites/space, world news + more). Bridges any MCP client to dynamicfeed.ai; works through firewalls that block remote SSE.",
5
+ "type": "module",
6
+ "bin": {
7
+ "dynamicfeed-mcp": "index.js"
8
+ },
9
+ "files": [
10
+ "index.js",
11
+ "README.md"
12
+ ],
13
+ "engines": {
14
+ "node": ">=18"
15
+ },
16
+ "dependencies": {
17
+ "@modelcontextprotocol/sdk": "^1.12.0"
18
+ },
19
+ "keywords": [
20
+ "mcp",
21
+ "model-context-protocol",
22
+ "mcp-server",
23
+ "context-protocol",
24
+ "dynamic-feed",
25
+ "ai",
26
+ "llm",
27
+ "live-data",
28
+ "gemini-mcp"
29
+ ],
30
+ "license": "MIT",
31
+ "homepage": "https://dynamicfeed.ai",
32
+ "author": "Dynamic Feed (https://dynamicfeed.ai)",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/samimeshkor/dynamic-feed"
36
+ }
37
+ }