We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/xydong-web/mcp-nexus'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
type Bucket = { count: number; resetAtMs: number };
export class FixedWindowRateLimiter {
private readonly maxPerWindow: number;
private readonly windowMs: number;
private readonly buckets = new Map<string, Bucket>();
constructor(opts: { maxPerWindow: number; windowMs: number }) {
this.maxPerWindow = opts.maxPerWindow;
this.windowMs = opts.windowMs;
}
check(key: string, now = Date.now()): { ok: true } | { ok: false; retryAfterMs: number } {
const bucket = this.buckets.get(key);
if (!bucket || now >= bucket.resetAtMs) {
this.buckets.set(key, { count: 1, resetAtMs: now + this.windowMs });
return { ok: true };
}
if (bucket.count >= this.maxPerWindow) {
return { ok: false, retryAfterMs: Math.max(0, bucket.resetAtMs - now) };
}
bucket.count += 1;
return { ok: true };
}
tryAcquire(key: string, now = Date.now()): boolean {
const result = this.check(key, now);
return result.ok;
}
}