Skip to content

Update repository references for transfer to prefecthq#3207

Merged
jlowin merged 4 commits intomainfrom
transfer-to-prefecthq
Feb 18, 2026
Merged

Update repository references for transfer to prefecthq#3207
jlowin merged 4 commits intomainfrom
transfer-to-prefecthq

Conversation

@jlowin
Copy link
Copy Markdown
Member

@jlowin jlowin commented Feb 18, 2026

Preparing to transfer the repository from jlowin/fastmcp to prefecthq/fastmcp. This updates all source-level references — URLs in pyproject.toml, docs, CI scripts, examples, tests, and error messages — to point to the new location.

The docs/python-sdk/ files are auto-generated and will be updated by the bot when it runs against the new repo.

References to @jlowin as a contributor (changelog credits, etc.) are left as-is since those refer to the person, not the repo. The upgrade guide now notes the new repository home as part of the v3 release.

Summary by CodeRabbit

Release Notes

  • Chores
    • Migrated FastMCP repository to PrefectHQ organization. Updated all repository references, documentation links, and configuration files to point to the new GitHub location (prefecthq/fastmcp).

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Feb 18, 2026

📝 Walkthrough

Walkthrough

This PR updates all repository references from jlowin/fastmcp to prefecthq/fastmcp across documentation, configuration files, examples, tests, and source code. No functional logic or control flow changes are introduced; the update is purely a repository owner migration affecting URLs, links, and configuration references throughout the codebase.

Changes

Cohort / File(s) Summary
Workflow & Configuration
.github/workflows/martian-triage-issue.yml, README.md, SECURITY.md, pyproject.toml
Updated repository owner references and badge links from jlowin to prefecthq in workflow files, README badges, security advisory URL, and project configuration.
Documentation (Main)
docs/clients/sampling.mdx, docs/community/showcase.mdx, docs/development/contributing.mdx, docs/development/tests.mdx, docs/development/upgrade-guide.mdx, docs/development/v3-notes/v3-features.mdx, docs/patterns/contrib.mdx, docs/patterns/testing.mdx, docs/servers/resources.mdx, docs/servers/tools.mdx, docs/updates.mdx, docs/docs.json
Updated all repository URLs, GitHub discussion links, clone instructions, and example references from jlowin/fastmcp to prefecthq/fastmcp. Added upgrade guide info block documenting the new repository home.
Documentation (v2)
docs/v2/clients/sampling.mdx, docs/v2/community/showcase.mdx, docs/v2/development/contributing.mdx, docs/v2/development/tests.mdx, docs/v2/patterns/contrib.mdx, docs/v2/patterns/testing.mdx, docs/v2/servers/resources.mdx, docs/v2/servers/tools.mdx, docs/v2/updates.mdx
Updated all repository URLs, GitHub discussion links, and external references in v2 documentation from jlowin/fastmcp to prefecthq/fastmcp.
Examples
examples/atproto_mcp/README.md, examples/atproto_mcp/demo.py, examples/atproto_mcp/fastmcp.json, examples/smart_home/hub.fastmcp.json, examples/smart_home/lights.fastmcp.json, examples/smart_home/pyproject.toml, examples/smart_home/src/smart_home/lights/server.py
Updated dependency URLs and example links from jlowin/fastmcp.git to prefecthq/fastmcp.git in all example configurations and source files.
Scripts
scripts/auto_close_duplicates.py, scripts/auto_close_needs_mre.py
Updated default repository owner fallback values from jlowin to prefecthq in GitHub automation scripts.
Source Code
src/fastmcp/contrib/component_manager/README.md, src/fastmcp/server/server.py
Updated license attribution and error message URLs to reference prefecthq/fastmcp repository.
Tests
tests/client/client/test_client.py, tests/client/client/test_session.py, tests/client/test_stdio.py, tests/integration_tests/test_github_mcp_remote.py, tests/server/middleware/test_middleware.py, tests/server/mount/test_advanced.py, tests/server/tasks/test_task_methods.py, tests/server/test_tool_transformation.py, tests/test_mcp_config.py, tests/utilities/test_json_schema.py
Updated docstring references, issue URLs, and test data parameters from jlowin/fastmcp to prefecthq/fastmcp. Test targets updated to reference new organization.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~15 minutes

Possibly related PRs

Suggested labels

documentation

Poem

🐰 From jlowin's hands to PrefectHQ's care,
Our fastmcp hops through repos with flair,
Links and URLs dance and align,
One owner to the next, all by design,
The warren's expanded, hooray hooray! 🌟

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 71.43% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ❓ Inconclusive The description explains the purpose and scope of changes but lacks complete contributor and review checklist items required by the template. Complete the Contributors and Review Checklists by checking relevant boxes and specifying the related issue number (#).
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: updating repository references from jlowin to prefecthq namespace in preparation for repository transfer.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch transfer-to-prefecthq

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@marvin-context-protocol marvin-context-protocol Bot added the enhancement Improvement to existing functionality. For issues and smaller PR improvements. label Feb 18, 2026
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/v2/servers/tools.mdx (1)

160-169: ⚠️ Potential issue | 🟡 Minor

"Using the Decorator" code block is missing import time

The second CodeGroup tab calls time.sleep(5) but never imports time. Additionally, make_async_background is used without any indication that it comes from the first tab, which could confuse readers who copy only this snippet.

📝 Proposed fix
 from fastmcp import FastMCP
+import time
+from your_module import make_async_background  # defined in the Decorator Recipe tab above
 
 mcp = FastMCP()
 
 `@mcp.tool`()
 `@make_async_background`
 def my_tool() -> None:
     time.sleep(5)

As per coding guidelines: "Code examples in documentation must explain before showing code and include all necessary imports for full runnable blocks."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/v2/servers/tools.mdx` around lines 160 - 169, The code example in the
"Using the Decorator" snippet is missing necessary imports: add "import time"
and explicitly import or reference make_async_background so the snippet is
runnable and self-contained (e.g., import make_async_background from its module
or show it comes from the first tab); ensure the top of the snippet includes
"from fastmcp import FastMCP" plus the import for make_async_background (or a
comment indicating its origin) so my_tool, mcp.tool(), make_async_background,
and time.sleep are all defined in the snippet.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/patterns/contrib.mdx`:
- Line 15: Replace the broken GitHub link target in the docs text that points to
"https://github.com/prefecthq/fastmcp/tree/main/src/fastmcp/contrib" (the
"contrib directory" link) with the correct repository URL
"https://github.com/jlowin/fastmcp/tree/main/src/fastmcp/contrib" so the link
resolves; if you prefer to wait for a transfer, leave a TODO comment in the same
line indicating the link should be updated to prefecthq/fastmcp once the
transfer is complete.

In `@docs/v2/community/showcase.mdx`:
- Line 50: The GitHub Discussions links in docs/v2/community/showcase.mdx were
changed to prefectorhq/fastmcp but that repo transfer hasn't happened yet;
revert the two updated URLs back to the current jlowin/fastmcp/discussions (or
guard them with a TODO comment) so the links remain valid until the transfer is
complete—specifically update the markdown link target(s) that currently point to
https://github.com/prefecthq/fastmcp/discussions back to
https://github.com/jlowin/fastmcp/discussions (these are the link occurrences on
the lines referenced in the diff).

---

Outside diff comments:
In `@docs/v2/servers/tools.mdx`:
- Around line 160-169: The code example in the "Using the Decorator" snippet is
missing necessary imports: add "import time" and explicitly import or reference
make_async_background so the snippet is runnable and self-contained (e.g.,
import make_async_background from its module or show it comes from the first
tab); ensure the top of the snippet includes "from fastmcp import FastMCP" plus
the import for make_async_background (or a comment indicating its origin) so
my_tool, mcp.tool(), make_async_background, and time.sleep are all defined in
the snippet.

Comment thread docs/patterns/contrib.mdx
Contrib modules provide additional features, integrations, or patterns that complement the core FastMCP library. They offer a way for the community to share useful extensions while keeping the core library focused and maintainable.

The available modules can be viewed in the [contrib directory](https://github.com/jlowin/fastmcp/tree/main/src/fastmcp/contrib).
The available modules can be viewed in the [contrib directory](https://github.com/prefecthq/fastmcp/tree/main/src/fastmcp/contrib).
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🌐 Web query:

prefecthq/fastmcp GitHub repository

💡 Result:

PrefectHQ/fastmcp is not an active GitHub repository (the URL returns 404 Not Found). [1]

The FastMCP project is available here instead:

  • jlowin/fastmcp (FastMCP v2, Python framework for building MCP servers/clients) [2]

Related PrefectHQ repos you may be looking for:

  • PrefectHQ/prefect-mcp-server (Prefect’s MCP server) [3]
  • PrefectHQ/fastmcp-quickstart-template (FastMCP quickstart example template) [4]

Sources: [1] [2] [3] [4]


Update the GitHub link to point to the correct FastMCP repository.

The link to prefecthq/fastmcp returns 404 — this repository does not exist. The FastMCP project is available at jlowin/fastmcp instead. Either update the link to the correct repository or wait for the actual transfer to prefecthq/fastmcp to complete before merging.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/patterns/contrib.mdx` at line 15, Replace the broken GitHub link target
in the docs text that points to
"https://github.com/prefecthq/fastmcp/tree/main/src/fastmcp/contrib" (the
"contrib directory" link) with the correct repository URL
"https://github.com/jlowin/fastmcp/tree/main/src/fastmcp/contrib" so the link
resolves; if you prefer to wait for a transfer, leave a TODO comment in the same
line indicating the link should be updated to prefecthq/fastmcp once the
transfer is complete.

### Community Examples

Have you built something interesting with FastMCP? We'd love to feature high-quality examples here! Start a [discussion on GitHub](https://github.com/jlowin/fastmcp/discussions) to share your project.
Have you built something interesting with FastMCP? We'd love to feature high-quality examples here! Start a [discussion on GitHub](https://github.com/prefecthq/fastmcp/discussions) to share your project.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🌐 Web query:

GitHub repository prefecthq/fastmcp discussions

💡 Result:

There doesn’t appear to be a prefecthq/fastmcp repository with GitHub Discussions. The FastMCP repo (made by Prefect) is hosted as jlowin/fastmcp, and its Discussions are here: https://github.com/jlowin/fastmcp/discussions. [1][2]

If you meant Prefect’s org Discussions instead, Prefect’s main repo Discussions are here: https://github.com/prefecthq/prefect/discussions. [3]

Sources:
[1] https://github.com/jlowin/fastmcp/discussions
[2] https://github.com/jlowin/fastmcp
[3] https://github.com/prefecthq/prefect/discussions


Do not merge these changes until the repository transfer to prefecthq/fastmcp is complete.

Lines 50 and 59 update the GitHub Discussions URLs to https://github.com/prefecthq/fastmcp/discussions, but this repository does not currently exist. The FastMCP repository is still at jlowin/fastmcp. Merging these changes will create broken links for users. Either defer these URL changes until after the transfer is finalized, or keep the links pointing to jlowin/fastmcp/discussions for now.

Also applies to: 59-59

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/v2/community/showcase.mdx` at line 50, The GitHub Discussions links in
docs/v2/community/showcase.mdx were changed to prefectorhq/fastmcp but that repo
transfer hasn't happened yet; revert the two updated URLs back to the current
jlowin/fastmcp/discussions (or guard them with a TODO comment) so the links
remain valid until the transfer is complete—specifically update the markdown
link target(s) that currently point to
https://github.com/prefecthq/fastmcp/discussions back to
https://github.com/jlowin/fastmcp/discussions (these are the link occurrences on
the lines referenced in the diff).

@marvin-context-protocol
Copy link
Copy Markdown
Contributor

Test Failure Analysis

Summary: Integration test is failing with a 404 error because it's trying to access , which doesn't exist yet.

Root Cause: The test was updated to use {"owner": "prefecthq", "repo": "fastmcp"} in preparation for the repository transfer, but the transfer hasn't happened yet. The GitHub API returns a 404 when trying to list commits from a non-existent repository.

Suggested Solution: This is expected and the test will pass once the repository is transferred to . You have a couple of options:

  1. Recommended: Merge this PR after the repository transfer is complete, when the test will naturally pass
  2. Alternative: Temporarily skip this specific test by adding a skip decorator or xfail marker with a note about the pending transfer

The failure is cosmetic and doesn't indicate any code issues - it's simply a timing issue between updating the references and completing the actual repository transfer.

Detailed Analysis

The failing test at tests/integration_tests/test_github_mcp_remote.py:106 calls:

result = await streamable_http_client.call_tool(
    "list_commits", {"owner": "prefecthq", "repo": "fastmcp"}
)

This triggers a GitHub API request to:

GET https://api.github.com/repos/prefecthq/fastmcp/commits?page=1&per_page=30

Which returns:

fastmcp.exceptions.ToolError: failed to list commits: : GET https://api.github.com/repos/prefecthq/fastmcp/commits?page=1&per_page=30: 404 Not Found []

The test was updated from "jlowin" to "prefecthq" as part of this PR's comprehensive update of all repository references.

Related Files
  • tests/integration_tests/test_github_mcp_remote.py:106 - The failing test that was updated to use the new repository owner

@marvin-context-protocol
Copy link
Copy Markdown
Contributor

Test Failure Analysis

Summary: Integration test test_call_tool_list_commits is failing with a 404 error because it's trying to access prefecthq/fastmcp, which doesn't exist yet.

Root Cause: The test was updated to use {"owner": "prefecthq", "repo": "fastmcp"} in preparation for the repository transfer, but the transfer hasn't happened yet. The GitHub API returns a 404 when trying to list commits from a non-existent repository.

Suggested Solution: This is expected and the test will pass once the repository is transferred to prefecthq. You have a couple of options:

  1. Recommended: Merge this PR after the repository transfer is complete, when the test will naturally pass
  2. Alternative: Temporarily skip this specific test by adding a skip decorator or xfail marker with a note about the pending transfer

The failure is cosmetic and doesn't indicate any code issues - it's simply a timing issue between updating the references and completing the actual repository transfer.

Detailed Analysis

The failing test at tests/integration_tests/test_github_mcp_remote.py:106 calls:

result = await streamable_http_client.call_tool(
    "list_commits", {"owner": "prefecthq", "repo": "fastmcp"}
)

This triggers a GitHub API request to:

GET https://api.github.com/repos/prefecthq/fastmcp/commits?page=1&per_page=30

Which returns:

fastmcp.exceptions.ToolError: failed to list commits: : GET https://api.github.com/repos/prefecthq/fastmcp/commits?page=1&per_page=30: 404 Not Found []

The test was updated from "jlowin" to "prefecthq" as part of this PR's comprehensive update of all repository references.

Related Files
  • tests/integration_tests/test_github_mcp_remote.py:106 - The failing test that was updated to use the new repository owner

@jlowin jlowin merged commit 9b248a1 into main Feb 18, 2026
10 checks passed
@jlowin jlowin deleted the transfer-to-prefecthq branch February 18, 2026 15:33
@marvin-context-protocol
Copy link
Copy Markdown
Contributor

Test Failure Analysis

Summary: The test test_rate_limiting_blocks_rapid_requests is failing because it didn't raise a ToolError when expected, indicating the rate limit wasn't triggered as anticipated.

Root Cause: The test has a flaky assumption about the number of requests made during client operations. The test configures burst_capacity=6 expecting:

  • 1 initialize
  • 1 list_tools
  • 3 successful call_tool operations
  • 1 rate-limited call_tool (expected to fail)

However, the client can make additional list_tools requests that aren't accounted for in the test's burst capacity calculation. Specifically, in src/fastmcp/client/mixins/tools.py:377-378, when processing tool results with structured content, the client automatically calls list_tools() again if the tool isn't in the output schemas cache:

if name not in tool_output_schemas:
    await list_tools_fn()  # Extra list_tools call!

This makes the total request count unpredictable and timing-dependent, causing the test to be flaky.

Suggested Solution:

  1. Increase the burst capacity to account for potential extra list_tools calls (e.g., change from burst_capacity=6 to burst_capacity=8)
  2. OR refactor the test to be more deterministic by:
    • Using a custom client that doesn't auto-fetch schemas
    • Mocking the middleware to track actual request counts
    • Testing at the middleware level directly instead of through the full client stack

The simplest fix is option 1 - increase burst_capacity to accommodate the non-deterministic number of list_tools calls. However, this makes the test less precise.

Detailed Analysis

Test Failure Log

tests/server/middleware/test_rate_limiting.py::TestRateLimitingMiddlewareIntegration::test_rate_limiting_blocks_rapid_requests
Failed: DID NOT RAISE <class 'fastmcp.exceptions.ToolError'>

The test expects the 4th call_tool to fail with a rate limit error, but it succeeded instead. This means there were more tokens available in the burst capacity than expected.

Code Location

  • Test: tests/server/middleware/test_rate_limiting.py:307-323
  • Problematic logic: src/fastmcp/client/mixins/tools.py:377-378

Why This Happens

The client's tool output schema caching is lazy - it only fetches schemas when needed. Depending on timing and cache state, extra list_tools requests can occur during tool result processing, consuming tokens from the burst capacity that the test didn't account for.

Related Files
  • tests/server/middleware/test_rate_limiting.py:307-323 - Failing test
  • src/fastmcp/client/mixins/tools.py:377-378 - Source of additional list_tools calls
  • src/fastmcp/server/middleware/rate_limiting.py - Rate limiting middleware implementation

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

Labels

enhancement Improvement to existing functionality. For issues and smaller PR improvements.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant