Borrowing it
Nothing to install: this file belongs to htlin222/openevidence-mcp. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/htlin222/openevidence-mcp/main/.claude/skills/openevidence-rate-limits/SKILL.mdgit clone --depth 1 https://github.com/htlin222/openevidence-mcpWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/htlin222/openevidence-mcp/openevidence-rate-limits)<a href="https://agentmods.dev/skills/htlin222/openevidence-mcp/openevidence-rate-limits"><img src="https://agentmods.dev/badge/skills/htlin222/openevidence-mcp/openevidence-rate-limits/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/htlin222/openevidence-mcp/openevidence-rate-limits"><img src="https://agentmods.dev/badge/skills/htlin222/openevidence-mcp/openevidence-rate-limits.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00078 | $0.01626 |
| Opus 5 | $0.00039 | $0.00813 |
| Sonnet 5 | $0.00016 | $0.00325 |
| Haiku 4.5 | $0.00008 | $0.00163 |
Grade A, and why
openevidence-rate-limits scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 11d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 155 lines — stays where its author put it; the contents beside it link to each section on GitHub.
OpenEvidence Rate Limits
Self-harnessing rate limiter for the OpenEvidence cookie API. Tuned so the client never bursts above its own configured RPM, even before the server returns a 429.
Overview
OpenEvidence does not publish a stable X-RateLimit-* contract for the
cookie-based web API. This skill ships a defense-in-depth limiter that:
- Sliding-window self-throttle caps requests-per-window at a configurable
target usage (default 80% of
maxRequestsPerWindow). - Hard burst cap prevents tight loops from firing more than
burstCaprequests in any 1-second slice. - Priority queue —
stat>urgent>routine>research— so a STAT clinical query jumps ahead of a research batch. - Exponential backoff with jitter on 408/425/429/5xx, with
Retry-Afterhonored verbatim when the server sends it. - Opportunistic header parsing — if
X-RateLimit-Remaining/X-RateLimit-Resetever appear, they tighten the limiter; otherwise we rely on the client-side counters.
The limiter is fully testable: clock and sleeper are injectable so the test suite runs in ~1 second.
Implementation map
| File | Role |
|---|---|
src/rate-limit.ts |
RateLimitController, withExponentialBackoff, computeBackoffDelay, parseRetryAfterMs, HttpError. |
src/openevidence-client.ts |
requestWithRateLimit wraps every fetch with acquire/observe/release + retry. |
src/config.ts |
resolveRateLimitConfig reads env vars and folds them into AppConfig.rateLimit. |
src/types.ts |
OpenEvidenceAskRequest.priority?: ClinicalPriority. |
test/rate-limit.test.ts |
25 tests including a 50-concurrent burst integration test. |
Configuration (env vars)
| Variable | Default | Effect |
|---|---|---|
OE_MCP_RPM |
60 | Max requests per window (typically 1 min). |
OE_MCP_RATE_WINDOW_MS |
60000 | Sliding-window length. |
OE_MCP_BURST |
6 | Hard cap per 1 s slice. |
OE_MCP_RATE_TARGET |
80 | Throttle when usage hits this % of RPM. |
OE_MCP_MAX_CONCURRENT |
4 | In-flight request cap. |
OE_MCP_MAX_RETRIES |
5 | Total retries on 429/5xx. |
OE_MCP_RETRY_BASE_MS |
1000 | Backoff base — base * 2^attempt. |
OE_MCP_RETRY_MAX_MS |
60000 | Backoff ceiling. |
OE_MCP_RETRY_JITTER_MS |
500 | Uniform jitter added to backoff. |
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 11d ago First seen · 155 lines · 78 tokens per session scan A bb5bed0003cb
openevidence-rate-limits is a skill published in the GitHub repository htlin222/openevidence-mcp (72 stars, last pushed 2d ago), licensed Apache-2.0. It adds 78 tokens to every session and 1,626 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
neo4j-getting-started-skill
Orchestrates zero-to-running-app in 8 stages — prerequisites → context → provision → model → load → explore → query → build. Each stage reads its own reference file. Supports HITL and fully autonomous operation. Use when starting a new Neo4j project from scratch, provisioning Aura, generating synthetic data, building…
neo4j-graphql-skill
Build and configure a GraphQL API backed by Neo4j using @neo4j/graphql v7 (current) or v5 (LTS). Covers Neo4jGraphQL constructor, getSchema(), assertIndexesAndConstraints(), type definitions with @node, @relationship (IN/OUT/UNDIRECTED), @cypher for custom resolvers, @authorization/@authentication for JWT/JWKS…
neo4j-kafka-skill
Configure and operate the Neo4j Connector for Kafka (sink + source) and the native Neo4j CDC API. Covers Cypher/Pattern/CUD sink strategies, CDC-based and query-based source, exactly-once semantics, DLQ error handling, Confluent Cloud managed connector, schema registry (Avro/JSON), and native db.cdc.query cursor-loop…
bullmq-specialist
BullMQ expert for Redis-backed job queues, background processing, and reliable async execution in Node.js/TypeScript applications. Use when: bullmq, bull queue, redis queue, background job, job queue.
clerk-auth
Expert patterns for Clerk auth implementation, middleware, organizations, webhooks, and user sync Use when: adding authentication, clerk auth, user authentication, sign in, sign up.
domain-modeling
Build or sharpen a project's domain language and durable decisions. Use when terminology is fuzzy or contradictory, relationships need scenario testing, the code disagrees with the stated model, or a glossary or ADR-class decision must be updated; do not trigger merely to read existing context.