Skip to content

fix(core): respect MCP endpoint cooldowns after HTTP 429 - #52855

Closed
davdroman wants to merge 1 commit into
anomalyco:devfrom
davdroman:mcp-rate-cooldown
Closed

davdroman wants to merge 1 commit into
anomalyco:devfrom
davdroman:mcp-rate-cooldown

Conversation

@davdroman

Copy link
Copy Markdown

Issue for this PR

Closes #52854

Type of change

  • Bug fix
  • New feature
  • Refactor / code improvement
  • Documentation

What does this PR do?

Record an endpoint cooldown after a remote MCP request returns HTTP 429. Later requests to the same endpoint fail locally until Retry-After expires, including requests from other connections. Accept integer seconds and HTTP dates, with a one-second fallback for missing or invalid values.

The original rejection still reaches the caller. Requests are never queued or replayed, so the cooldown cannot automatically repeat a mutating tool call. OAuth requests and unrelated endpoints remain independent. Healthy traffic is not serialized, and auto-negotiation preserves the original probe rejection. Cleanup uses node:timers so the timer supports unref() in workerd.

How did you verify your code works?

The generic local-server regression MCP cooldown suppresses repeated initialization after HTTP 429 in packages/core/test/mcp.test.ts observed two requests before the fix and one after it. The focused cooldown tests passed, including date parsing in non-UTC timezones, connected-client gating, and no replay of rejected tool calls.

The actual workerd regression reproduced an unref TypeError before the timer fix and now passes under both tested compatibility dates. The final integration run with this fix and the separate discovery-cache fix passed all 139 tests. Core typechecking and the full repository check passed, with all 36 tasks successful and no lint errors. The diff check passed.

Reviewers can run the MCP cooldown tests from packages/core.

Screenshots / recordings

Not applicable. No UI changes.

Checklist

  • I have tested my changes locally
  • I have not included unrelated changes in this PR

@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

Thanks for your contribution!

This PR doesn't have a linked issue. All PRs must reference an existing issue.

Please:

  1. Open an issue describing the bug/feature (if one doesn't exist)
  2. Add Fixes #<number> or Closes #<number> to this PR description

See CONTRIBUTING.md for details.

@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

The following comment was made by an LLM, it may be inaccurate:

@github-actions

github-actions Bot commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

Automated PR Cleanup

Thank you for contributing to opencode.

Due to the high volume of PRs from users and AI agents, we periodically close older PRs using automated criteria so maintainers can focus review time on the most active and community-supported contributions.

This PR was closed because it matched the following cleanup criteria:

  • The PR was created more than 1 month ago
  • The PR had fewer than 2 positive reactions
  • Positive reactions are counted as thumbs-up, heart, celebration, or rocket reactions on the PR

PRs created within the last month are not affected by this cleanup.

If you believe this PR was closed incorrectly, or if you are still actively working on it, please leave a comment explaining why it should be reopened. A maintainer can review and reopen it if appropriate.

Thanks again for taking the time to contribute.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

MCP connections keep contacting an endpoint during Retry-After after HTTP 429

1 participant