Skip to content

Conversation

@jlowin
Copy link
Owner

@jlowin jlowin commented Nov 3, 2025

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

@marvin-context-protocol marvin-context-protocol bot added enhancement Improvement to existing functionality. For issues and smaller PR improvements. dependencies Updates to project dependencies. Automatically applied to dependabot PRs. labels Nov 3, 2025
@BrianPugh
Copy link

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.

@jlowin
Copy link
Owner Author

jlowin commented Nov 3, 2025

Thanks @BrianPugh! Ok, in that case what I'll do is

  • update our pin to 4 (which I believe will be zero issue) to move us closer to the eventual 5 release
  • solve forward compliance issues with documentation pointing at the availability of 5 alpha

Thanks so much for being a partner on resolving this!

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 3, 2025

Walkthrough

Added 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

Cohort / File(s) Change Summary
Installation documentation
docs/getting-started/installation.mdx
Added a "Dependency Licensing" subsection describing Cyclopts v4 pulling docutils, noting licensing implications, giving a pip install example for Cyclopts v5 alpha as a workaround, and linking the related issue.

Poem

🐰 I nibbled notes on licenses bright,

I hopped through docs by moonlit byte,
For Cyclopts' chain that caused a fuss,
Try v5 alpha — a workaround for us,
A tiny patch, a carrot-right delight.

Pre-merge checks and finishing touches

❌ Failed checks (3 warnings)
Check name Status Explanation Resolution
Description check ⚠️ Warning The description provides context and rationale but does not follow the required template structure with the Contributors and Review checklists. Add the missing Contributors Checklist and Review Checklist sections with appropriate checkboxes to match the repository template.
Linked Issues check ⚠️ Warning The PR addresses issue #2320 (docutils licensing concern) but diverges from the stated objectives by pinning cyclopts instead of making docutils optional or documenting its license. Either revert the approach to align with #2320's objectives (make docutils optional or document its license) or clarify why pinning cyclopts alone satisfies the linked issue requirements.
Title check ⚠️ Warning The title references pinning Cyclopts to v4.0.0, but the PR objectives clarify the actual change: pinning to v5.0.0a1 (alpha) and adding documentation. The title is partially related but misleading about the specific version. Update the title to accurately reflect both the version pin (v5.0.0a1) and the documentation addition, such as 'Pin Cyclopts to v5.0.0a1 and add dependency licensing documentation'.
✅ Passed checks (1 passed)
Check name Status Explanation
Out of Scope Changes check ✅ Passed The changes are limited to documentation and are directly aligned with addressing the docutils dependency concern from #2320.
✨ 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 cyclopts-v5

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

Copy link
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: 3

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6cc9559 and 5864b04.

⛔ Files ignored due to path filters (3)
  • README.md is excluded by none and included by none
  • pyproject.toml is excluded by none and included by none
  • uv.lock is excluded by !**/*.lock and 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

Copy link
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: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5864b04 and 5aa93ac.

⛔ Files ignored due to path filters (2)
  • README.md is excluded by none and included by none
  • uv.lock is excluded by !**/*.lock and 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.

Comment on lines +53 to +55
```bash
pip install "cyclopts>=5.0.0a1"
```
Copy link
Contributor

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.

@jlowin jlowin changed the title Pin cyclopts to v5.0.0a1+ Pin Cyclopts to v4.0.0 + compliance note Nov 3, 2025
@jlowin jlowin merged commit dcfd9ee into main Nov 3, 2025
16 checks passed
@jlowin jlowin deleted the cyclopts-v5 branch November 3, 2025 23:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Updates to project dependencies. Automatically applied to dependabot PRs. enhancement Improvement to existing functionality. For issues and smaller PR improvements.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docutils pulled as a transitive dependency with restrictive license concerns

3 participants