import { McpError, McpErrorCode, Redop } from "@redopjs/redop";
new Redop({
serverInfo: {
name: "upstash-demo",
version: "0.1.0",
},
})
.middleware(async ({ request, next }) => {
const identifier =
request.headers["x-user-id"] ??
request.headers["x-forwarded-for"] ??
request.ip ??
"anonymous";
const { pending, remaining, reset, success } =
await ratelimit.limit(identifier);
if (pending) {
void pending.catch(() => {});
}
if (!success) {
throw new McpError(
McpErrorCode.InvalidRequest,
`Rate limit exceeded. Retry after ${Math.ceil(
Math.max(reset - Date.now(), 0) / 1000
)} seconds.`
);
}
return next();
})
.tool("ping", {
handler: () => ({ ok: true }),
});