fdic-mcp-server 1.2.4 → 1.2.6
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/dist/index.js +31 -5
- package/dist/server.js +31 -5
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -32,7 +32,7 @@ var import_types = require("@modelcontextprotocol/sdk/types.js");
|
|
|
32
32
|
var import_express = __toESM(require("express"));
|
|
33
33
|
|
|
34
34
|
// src/constants.ts
|
|
35
|
-
var VERSION = true ? "1.2.
|
|
35
|
+
var VERSION = true ? "1.2.6" : process.env.npm_package_version ?? "0.0.0-dev";
|
|
36
36
|
var FDIC_API_BASE_URL = "https://banks.data.fdic.gov/api";
|
|
37
37
|
var CHARACTER_LIMIT = 5e4;
|
|
38
38
|
var DEFAULT_FDIC_MAX_RESPONSE_BYTES = 5 * 1024 * 1024;
|
|
@@ -31242,10 +31242,9 @@ var QUERY_CACHE_MAX_ENTRIES = 500;
|
|
|
31242
31242
|
var queryCache = /* @__PURE__ */ new Map();
|
|
31243
31243
|
function pruneExpiredQueryCache(now) {
|
|
31244
31244
|
for (const [key, entry] of queryCache.entries()) {
|
|
31245
|
-
if (entry.expiresAt
|
|
31246
|
-
|
|
31245
|
+
if (entry.expiresAt <= now) {
|
|
31246
|
+
queryCache.delete(key);
|
|
31247
31247
|
}
|
|
31248
|
-
queryCache.delete(key);
|
|
31249
31248
|
}
|
|
31250
31249
|
}
|
|
31251
31250
|
function evictOverflowQueryCache() {
|
|
@@ -33970,6 +33969,8 @@ function parseAllowedOrigins(rawOrigins, port) {
|
|
|
33970
33969
|
`https://127.0.0.1:${port}`
|
|
33971
33970
|
];
|
|
33972
33971
|
}
|
|
33972
|
+
var DEFAULT_SESSION_IDLE_TIMEOUT_MS = 30 * 60 * 1e3;
|
|
33973
|
+
var DEFAULT_SESSION_SWEEP_INTERVAL_MS = 5 * 60 * 1e3;
|
|
33973
33974
|
async function closeSession(sessions, sessionId) {
|
|
33974
33975
|
const session = sessions.get(sessionId);
|
|
33975
33976
|
if (!session) {
|
|
@@ -33981,6 +33982,20 @@ async function closeSession(sessions, sessionId) {
|
|
|
33981
33982
|
await session.transport.close().catch(() => {
|
|
33982
33983
|
});
|
|
33983
33984
|
}
|
|
33985
|
+
function touchSession(session, now) {
|
|
33986
|
+
session.lastActivityAt = now;
|
|
33987
|
+
}
|
|
33988
|
+
async function sweepIdleSessions(sessions, idleTimeoutMs, now) {
|
|
33989
|
+
const expiredSessionIds = [];
|
|
33990
|
+
for (const [sessionId, session] of sessions.entries()) {
|
|
33991
|
+
if (now - session.lastActivityAt >= idleTimeoutMs) {
|
|
33992
|
+
expiredSessionIds.push(sessionId);
|
|
33993
|
+
}
|
|
33994
|
+
}
|
|
33995
|
+
await Promise.all(
|
|
33996
|
+
expiredSessionIds.map((sessionId) => closeSession(sessions, sessionId))
|
|
33997
|
+
);
|
|
33998
|
+
}
|
|
33984
33999
|
function sendInvalidSessionResponse(res) {
|
|
33985
34000
|
res.status(400).json({
|
|
33986
34001
|
jsonrpc: "2.0",
|
|
@@ -33996,7 +34011,13 @@ function createApp(options = {}) {
|
|
|
33996
34011
|
const port = options.port ?? 3e3;
|
|
33997
34012
|
const allowedOrigins = options.allowedOrigins ?? parseAllowedOrigins(void 0, port);
|
|
33998
34013
|
const sessions = /* @__PURE__ */ new Map();
|
|
34014
|
+
const sessionIdleTimeoutMs = options.sessionIdleTimeoutMs ?? DEFAULT_SESSION_IDLE_TIMEOUT_MS;
|
|
34015
|
+
const sessionSweepIntervalMs = options.sessionSweepIntervalMs ?? DEFAULT_SESSION_SWEEP_INTERVAL_MS;
|
|
33999
34016
|
app.use(import_express.default.json());
|
|
34017
|
+
const sessionSweepTimer = setInterval(() => {
|
|
34018
|
+
void sweepIdleSessions(sessions, sessionIdleTimeoutMs, Date.now());
|
|
34019
|
+
}, sessionSweepIntervalMs);
|
|
34020
|
+
sessionSweepTimer.unref?.();
|
|
34000
34021
|
app.get("/health", (_req, res) => {
|
|
34001
34022
|
res.json({ status: "ok", server: "fdic-mcp-server", version: VERSION });
|
|
34002
34023
|
});
|
|
@@ -34017,6 +34038,7 @@ function createApp(options = {}) {
|
|
|
34017
34038
|
});
|
|
34018
34039
|
return;
|
|
34019
34040
|
}
|
|
34041
|
+
touchSession(session, Date.now());
|
|
34020
34042
|
await session.transport.handleRequest(req, res, req.body);
|
|
34021
34043
|
if (req.method === "DELETE") {
|
|
34022
34044
|
await closeSession(sessions, sessionId);
|
|
@@ -34034,7 +34056,11 @@ function createApp(options = {}) {
|
|
|
34034
34056
|
enableDnsRebindingProtection: true,
|
|
34035
34057
|
allowedOrigins,
|
|
34036
34058
|
onsessioninitialized: (newSessionId) => {
|
|
34037
|
-
sessions.set(newSessionId, {
|
|
34059
|
+
sessions.set(newSessionId, {
|
|
34060
|
+
server,
|
|
34061
|
+
transport,
|
|
34062
|
+
lastActivityAt: Date.now()
|
|
34063
|
+
});
|
|
34038
34064
|
}
|
|
34039
34065
|
});
|
|
34040
34066
|
transport.onclose = () => {
|
package/dist/server.js
CHANGED
|
@@ -46,7 +46,7 @@ var import_types = require("@modelcontextprotocol/sdk/types.js");
|
|
|
46
46
|
var import_express = __toESM(require("express"));
|
|
47
47
|
|
|
48
48
|
// src/constants.ts
|
|
49
|
-
var VERSION = true ? "1.2.
|
|
49
|
+
var VERSION = true ? "1.2.6" : process.env.npm_package_version ?? "0.0.0-dev";
|
|
50
50
|
var FDIC_API_BASE_URL = "https://banks.data.fdic.gov/api";
|
|
51
51
|
var CHARACTER_LIMIT = 5e4;
|
|
52
52
|
var DEFAULT_FDIC_MAX_RESPONSE_BYTES = 5 * 1024 * 1024;
|
|
@@ -31256,10 +31256,9 @@ var QUERY_CACHE_MAX_ENTRIES = 500;
|
|
|
31256
31256
|
var queryCache = /* @__PURE__ */ new Map();
|
|
31257
31257
|
function pruneExpiredQueryCache(now) {
|
|
31258
31258
|
for (const [key, entry] of queryCache.entries()) {
|
|
31259
|
-
if (entry.expiresAt
|
|
31260
|
-
|
|
31259
|
+
if (entry.expiresAt <= now) {
|
|
31260
|
+
queryCache.delete(key);
|
|
31261
31261
|
}
|
|
31262
|
-
queryCache.delete(key);
|
|
31263
31262
|
}
|
|
31264
31263
|
}
|
|
31265
31264
|
function evictOverflowQueryCache() {
|
|
@@ -33984,6 +33983,8 @@ function parseAllowedOrigins(rawOrigins, port) {
|
|
|
33984
33983
|
`https://127.0.0.1:${port}`
|
|
33985
33984
|
];
|
|
33986
33985
|
}
|
|
33986
|
+
var DEFAULT_SESSION_IDLE_TIMEOUT_MS = 30 * 60 * 1e3;
|
|
33987
|
+
var DEFAULT_SESSION_SWEEP_INTERVAL_MS = 5 * 60 * 1e3;
|
|
33987
33988
|
async function closeSession(sessions, sessionId) {
|
|
33988
33989
|
const session = sessions.get(sessionId);
|
|
33989
33990
|
if (!session) {
|
|
@@ -33995,6 +33996,20 @@ async function closeSession(sessions, sessionId) {
|
|
|
33995
33996
|
await session.transport.close().catch(() => {
|
|
33996
33997
|
});
|
|
33997
33998
|
}
|
|
33999
|
+
function touchSession(session, now) {
|
|
34000
|
+
session.lastActivityAt = now;
|
|
34001
|
+
}
|
|
34002
|
+
async function sweepIdleSessions(sessions, idleTimeoutMs, now) {
|
|
34003
|
+
const expiredSessionIds = [];
|
|
34004
|
+
for (const [sessionId, session] of sessions.entries()) {
|
|
34005
|
+
if (now - session.lastActivityAt >= idleTimeoutMs) {
|
|
34006
|
+
expiredSessionIds.push(sessionId);
|
|
34007
|
+
}
|
|
34008
|
+
}
|
|
34009
|
+
await Promise.all(
|
|
34010
|
+
expiredSessionIds.map((sessionId) => closeSession(sessions, sessionId))
|
|
34011
|
+
);
|
|
34012
|
+
}
|
|
33998
34013
|
function sendInvalidSessionResponse(res) {
|
|
33999
34014
|
res.status(400).json({
|
|
34000
34015
|
jsonrpc: "2.0",
|
|
@@ -34010,7 +34025,13 @@ function createApp(options = {}) {
|
|
|
34010
34025
|
const port = options.port ?? 3e3;
|
|
34011
34026
|
const allowedOrigins = options.allowedOrigins ?? parseAllowedOrigins(void 0, port);
|
|
34012
34027
|
const sessions = /* @__PURE__ */ new Map();
|
|
34028
|
+
const sessionIdleTimeoutMs = options.sessionIdleTimeoutMs ?? DEFAULT_SESSION_IDLE_TIMEOUT_MS;
|
|
34029
|
+
const sessionSweepIntervalMs = options.sessionSweepIntervalMs ?? DEFAULT_SESSION_SWEEP_INTERVAL_MS;
|
|
34013
34030
|
app.use(import_express.default.json());
|
|
34031
|
+
const sessionSweepTimer = setInterval(() => {
|
|
34032
|
+
void sweepIdleSessions(sessions, sessionIdleTimeoutMs, Date.now());
|
|
34033
|
+
}, sessionSweepIntervalMs);
|
|
34034
|
+
sessionSweepTimer.unref?.();
|
|
34014
34035
|
app.get("/health", (_req, res) => {
|
|
34015
34036
|
res.json({ status: "ok", server: "fdic-mcp-server", version: VERSION });
|
|
34016
34037
|
});
|
|
@@ -34031,6 +34052,7 @@ function createApp(options = {}) {
|
|
|
34031
34052
|
});
|
|
34032
34053
|
return;
|
|
34033
34054
|
}
|
|
34055
|
+
touchSession(session, Date.now());
|
|
34034
34056
|
await session.transport.handleRequest(req, res, req.body);
|
|
34035
34057
|
if (req.method === "DELETE") {
|
|
34036
34058
|
await closeSession(sessions, sessionId);
|
|
@@ -34048,7 +34070,11 @@ function createApp(options = {}) {
|
|
|
34048
34070
|
enableDnsRebindingProtection: true,
|
|
34049
34071
|
allowedOrigins,
|
|
34050
34072
|
onsessioninitialized: (newSessionId) => {
|
|
34051
|
-
sessions.set(newSessionId, {
|
|
34073
|
+
sessions.set(newSessionId, {
|
|
34074
|
+
server,
|
|
34075
|
+
transport,
|
|
34076
|
+
lastActivityAt: Date.now()
|
|
34077
|
+
});
|
|
34052
34078
|
}
|
|
34053
34079
|
});
|
|
34054
34080
|
transport.onclose = () => {
|