- 
                Notifications
    
You must be signed in to change notification settings  - Fork 1.5k
 
Pin Cyclopts to v4.0.0 + compliance note #2354
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
| 
           I'm not so sure that we would want to pin the dependency here in this project. Pinning it here could lead to unsolvable dependency conflicts if a project uses fastmcp as-a-python-library but also uses cyclopts (or another dependency uses cyclopts). As an aside: i feel like this is a somewhat common problem (not unique to Cyclopts either; we'd have the same issue with click/typer/whatever). A possible solution is that I could add some functionality that would make it easy to vendor Cyclopts, so that python-libraries-that-just-so-happen-to-also-have-a-cli would never have cyclopts-dependency-conflicts. I think for the compliance issue, @sanketdaru should do some version pinning on his side.  | 
    
| 
           Thanks @BrianPugh! Ok, in that case what I'll do is 
 Thanks so much for being a partner on resolving this!  | 
    
          
WalkthroughAdded a "Dependency Licensing" subsection to the installation guide that explains Cyclopts v4’s docutils licensing, provides a pip install workaround to use Cyclopts v5 alpha, and links the related issue; no code or API changes. Changes
 Poem
 Pre-merge checks and finishing touches❌ Failed checks (3 warnings)
 ✅ Passed checks (1 passed)
 ✨ Finishing touches
 🧪 Generate unit tests (beta)
 Comment   | 
    
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (3)
README.mdis excluded by none and included by nonepyproject.tomlis excluded by none and included by noneuv.lockis excluded by!**/*.lockand included by none
📒 Files selected for processing (1)
docs/getting-started/installation.mdx(1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
docs/**/*.mdx
📄 CodeRabbit inference engine (docs/.cursor/rules/mintlify.mdc)
docs/**/*.mdx: Use clear, direct language appropriate for technical audiences
Write instructions and procedures in second person ("you")
Use active voice over passive voice
Use present tense for current states and future tense for outcomes
Maintain consistent terminology across the documentation
Keep sentences concise while preserving necessary context
Use parallel structure in lists, headings, and procedures
Lead with the most important information (inverted pyramid)
Use progressive disclosure: basic concepts before advanced ones
Break complex procedures into numbered steps
Include prerequisites and context before instructions
Provide expected outcomes for each major step
End sections with next steps or related information
Use descriptive, keyword-rich headings for navigation and SEO
Focus on user goals and outcomes rather than system features
Anticipate common questions and address them proactively
Include troubleshooting for likely failure points
Offer multiple pathways when appropriate (beginner vs advanced) and provide an opinionated recommended path
Use for supplementary information that supports the main content
Use for expert advice, shortcuts, or best practices
Use for critical cautions, breaking changes, or destructive actions
Use for neutral background or contextual information
Use to confirm success or completion
Provide single code examples using fenced code blocks with language (and filename when relevant)
Use to present the same concept in multiple languages
For API docs, use to show requests
For API docs, use to show responses
Use and to document procedures and sequential instructions
Use and for platform-specific or alternative approaches
Use / for supplementary content that might interrupt flow
In API docs, use for parameters (path, body, query, header) with type and required/default as appropria...
Files:
docs/getting-started/installation.mdx
🧠 Learnings (1)
📚 Learning: 2025-11-03T17:36:13.331Z
Learnt from: jlowin
Repo: jlowin/fastmcp PR: 2355
File: docs/clients/client.mdx:226-246
Timestamp: 2025-11-03T17:36:13.331Z
Learning: In FastMCP documentation, prefer showing the happy path in onboarding examples without over-explaining edge cases or adding defensive checks, as this reduces cognitive burden for new users learning the API.
Applied to files:
docs/getting-started/installation.mdx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Run tests: Python 3.10 on windows-latest
 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (2)
README.mdis excluded by none and included by noneuv.lockis excluded by!**/*.lockand included by none
📒 Files selected for processing (1)
docs/getting-started/installation.mdx(1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
docs/**/*.mdx
📄 CodeRabbit inference engine (docs/.cursor/rules/mintlify.mdc)
docs/**/*.mdx: Use clear, direct language appropriate for technical audiences
Write instructions and procedures in second person ("you")
Use active voice over passive voice
Use present tense for current states and future tense for outcomes
Maintain consistent terminology across the documentation
Keep sentences concise while preserving necessary context
Use parallel structure in lists, headings, and procedures
Lead with the most important information (inverted pyramid)
Use progressive disclosure: basic concepts before advanced ones
Break complex procedures into numbered steps
Include prerequisites and context before instructions
Provide expected outcomes for each major step
End sections with next steps or related information
Use descriptive, keyword-rich headings for navigation and SEO
Focus on user goals and outcomes rather than system features
Anticipate common questions and address them proactively
Include troubleshooting for likely failure points
Offer multiple pathways when appropriate (beginner vs advanced) and provide an opinionated recommended path
Use for supplementary information that supports the main content
Use for expert advice, shortcuts, or best practices
Use for critical cautions, breaking changes, or destructive actions
Use for neutral background or contextual information
Use to confirm success or completion
Provide single code examples using fenced code blocks with language (and filename when relevant)
Use to present the same concept in multiple languages
For API docs, use to show requests
For API docs, use to show responses
Use and to document procedures and sequential instructions
Use and for platform-specific or alternative approaches
Use / for supplementary content that might interrupt flow
In API docs, use for parameters (path, body, query, header) with type and required/default as appropria...
Files:
docs/getting-started/installation.mdx
🧠 Learnings (1)
📚 Learning: 2025-11-03T17:36:13.331Z
Learnt from: jlowin
Repo: jlowin/fastmcp PR: 2355
File: docs/clients/client.mdx:226-246
Timestamp: 2025-11-03T17:36:13.331Z
Learning: In FastMCP documentation, prefer showing the happy path in onboarding examples without over-explaining edge cases or adding defensive checks, as this reduces cognitive burden for new users learning the API.
Applied to files:
docs/getting-started/installation.mdx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Run tests: Python 3.10 on windows-latest
 
🔇 Additional comments (1)
docs/getting-started/installation.mdx (1)
46-58: Dependency Licensing section is well-structured and contextually clear.The use of the
<Info>callout is appropriate per guidelines, the explanation directly addresses the licensing concern without defensive language, and the link to the upstream cyclopts issue provides helpful context for users investigating the compliance timeline.
| ```bash | ||
| pip install "cyclopts>=5.0.0a1" | ||
| ``` | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion | 🟠 Major
Use <CodeGroup> for consistency with earlier examples.
The pip install command should follow the same pattern as lines 16–24 by presenting both uv pip and pip options in a <CodeGroup>, per your coding guidelines and to maintain consistency throughout the file.
Apply this diff to restructure the code block:
 If this is a concern, you can install Cyclopts v5 alpha which removes this dependency:
 
-```bash
-pip install "cyclopts>=5.0.0a1"
-```
+<CodeGroup>
+    ```bash uv
+    uv pip install "cyclopts>=5.0.0a1"
+    ```
+
+    ```bash pip
+    pip install "cyclopts>=5.0.0a1"
+    ```
+</CodeGroup>🤖 Prompt for AI Agents
In docs/getting-started/installation.mdx around lines 53 to 55, the single pip
install code block should be replaced with a <CodeGroup> containing two fenced
bash blocks (one labelled "bash uv" with the uv pip command and one labelled
"bash pip" with the pip command) to match the pattern used at lines 16–24; wrap
both fenced blocks inside a <CodeGroup> element, indent consistently, and remove
the original single fenced block.
Docutils has a complex licensing scheme and is a transitive dependency of FastMCP via cyclopts via rich-rst. This was raised in #2320 and discussed with @BrianPugh in BrianPugh/cyclopts#672, resulting in cyclopts publishing an early v5.0.0a1 release that removes docutils as a required dependency. This PR closes #2320 by pinning FastMCP's version of cyclopts to this alpha (or greater).
As it is an alpha/prerelease, we should responsibly check/update this pin as some package managers have difficulty with prereleases (though indicating an explicit alpha dependency should generally resolve this)
@coderabbitai ignore